在C#中,约束是与泛型类型参数一起使用的条件,它们限制了可以用于该类型参数的类型
下面是一个示例,展示了如何在C#中定义和使用约束:
using System;
// 定义一个泛型接口,其中 T 必须实现 IComparable<T> 接口
public interface ISortAlgorithm<T> where T : IComparable<T>
{
void Sort(T[] array);
}
// 定义一个泛型类,其中 T 必须是引用类型
public class MyClass<T> where T : class
{
private T _value;
public MyClass(T value)
{
_value = value;
}
public T GetValue()
{
return _value;
}
}
// 定义一个泛型类,其中 T 必须具有无参数的公共构造函数
public class MyOtherClass<T> where T : new()
{
private T _instance;
public MyOtherClass()
{
_instance = new T();
}
public T GetInstance()
{
return _instance;
}
}
// 定义一个泛型方法,其中 T 必须是值类型
public static class Utility
{
public static bool IsDefault<T>(T value) where T : struct
{
return EqualityComparer<T>.Default.Equals(value, default(T));
}
}
在这个示例中,我们定义了一个泛型接口 ISortAlgorithm<T>
,其中 T 必须实现 IComparable<T>
接口。我们还定义了一个泛型类 MyClass<T>
,其中 T 必须是引用类型。此外,我们还定义了一个泛型类 MyOtherClass<T>
,其中 T 必须具有无参数的公共构造函数,以及一个泛型方法 IsDefault<T>
,其中 T 必须是值类型。