推荐答案
在C#中,泛型约束(generic constraints)用于限制泛型类型参数的类型。以下是C#中常见的泛型约束:
where T : struct
类型参数必须是值类型(如int
、bool
等)。where T : class
类型参数必须是引用类型(如string
、object
等)。where T : new()
类型参数必须具有无参数的公共构造函数。where T : <基类名>
类型参数必须是指定基类或其派生类。where T : <接口名>
类型参数必须实现指定的接口。where T : U
类型参数必须是另一个类型参数U
或其派生类。where T : unmanaged
类型参数必须是非托管类型(如int
、float
等,不能是引用类型或包含引用类型的结构体)。
本题详细解读
1. where T : struct
此约束确保泛型类型参数是值类型。例如:
public class MyClass<T> where T : struct { // T 必须是值类型 }
2. where T : class
此约束确保泛型类型参数是引用类型。例如:
public class MyClass<T> where T : class { // T 必须是引用类型 }
3. where T : new()
此约束确保泛型类型参数具有无参数的公共构造函数。例如:
public class MyClass<T> where T : new() { public T CreateInstance() { return new T(); // 可以安全地调用无参构造函数 } }
4. where T : <基类名>
此约束确保泛型类型参数是指定基类或其派生类。例如:
public class MyClass<T> where T : MyBaseClass { // T 必须是 MyBaseClass 或其派生类 }
5. where T : <接口名>
此约束确保泛型类型参数实现了指定的接口。例如:
public class MyClass<T> where T : IMyInterface { // T 必须实现 IMyInterface 接口 }
6. where T : U
此约束确保泛型类型参数是另一个类型参数 U
或其派生类。例如:
public class MyClass<T, U> where T : U { // T 必须是 U 或其派生类 }
7. where T : unmanaged
此约束确保泛型类型参数是非托管类型。例如:
public class MyClass<T> where T : unmanaged { // T 必须是非托管类型 }