在 C# 中,泛型约束可以帮助你限制类型参数,以确保它们符合特定的条件。除了 where T : class
之外,还有其他几种常见的泛型约束。下面是所有可用的泛型约束写法:
1. 引用类型约束
where T : class
这个约束确保 T
必须是一个引用类型(如类、接口、委托或数组)。
2. 值类型约束
where T : struct
这个约束确保 T
必须是一个值类型(如 int
、bool
、DateTime
等)。
3. 无参构造函数约束
where T : new()
这个约束确保 T
必须有一个无参数的构造函数。这在你需要在泛型类或方法中创建 T
的实例时很有用。
4. 基类约束
where T : SomeBaseClass
这个约束确保 T
必须继承自指定的基类 SomeBaseClass
。
5. 接口约束
where T : ISomeInterface
这个约束确保 T
必须实现指定的接口 ISomeInterface
。
6. 多重约束
你可以组合多种约束。例如,确保 T
是一个继承自某个基类或实现某个接口的引用类型,并且有一个无参数构造函数:
where T : SomeBaseClass, ISomeInterface, new()
示例代码
以下是一些示例代码,展示了如何使用不同的泛型约束:
引用类型约束
public class Repository<T> where T : class
{
// 代码逻辑
}
值类型约束
public class Calculator<T> where T : struct
{
public T Add(T a, T b)
{
// 代码逻辑
}
}
无参构造函数约束
public class Factory<T> where T : new()
{
public T CreateInstance()
{
return new T();
}
}
基类约束
public class Service<T> where T : BaseService
{
// 代码逻辑
}
接口约束
public class Processor<T> where T : IProcessable
{
public void Process(T item)
{
item.Process();
}
}
多重约束
public class AdvancedService<T> where T : BaseService, IProcessable, new()
{
public T CreateAndProcess()
{
T instance = new T();
instance.Process();
return instance;
}
}
总结
where T : class
:确保T
是引用类型。where T : struct
:确保T
是值类型。where T : new()
:确保T
有无参数构造函数。where T : SomeBaseClass
:确保T
继承自指定基类。where T : ISomeInterface
:确保T
实现指定接口。- 组合约束:可以组合多个约束,如
where T : SomeBaseClass, ISomeInterface, new()
。
这些约束帮助你在泛型编程中更精确地定义类型参数的使用条件,增强代码的健壮性和可读性。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
评论(0)