阅读量:0
在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 必须是值类型。