在C#中,泛型约束用于限制泛型类型参数的类型。通过使用泛型约束,可以确保泛型类型参数满足特定的条件,以便在编译时捕获错误。
以下是一些常见的泛型约束及其用法:
public class MyClass<T> where T : class
{
// 只能接受引用类型作为T的参数
}
public class MyClass<T> where T : struct
{
// 只能接受值类型作为T的参数
}
public class MyClass<T> where T : new()
{
public T CreateInstance()
{
return new T(); // 必须具有无参数的构造函数
}
}
public interface IFoo
{
void DoSomething();
}
public class MyClass<T> where T : IFoo
{
public void DoSomethingWithT(T obj)
{
obj.DoSomething(); // T必须实现IFoo接口
}
}
public class BaseClass
{
// 基类
}
public class DerivedClass : BaseClass
{
// 派生类
}
public class MyClass<T> where T : BaseClass
{
// T必须是BaseClass或其派生类
}
通过正确使用泛型约束,可以提高代码的类型安全性和可读性,并减少在运行时出现错误的几率。