在 C# 中,泛型约束可以帮助你限制类型参数,以确保它们符合特定的条件。除了 where T : class 之外,还有其他几种常见的泛型约束。下面是所有可用的泛型约束写法:

1. 引用类型约束

where T : class

这个约束确保 T 必须是一个引用类型(如类、接口、委托或数组)。

2. 值类型约束

where T : struct

这个约束确保 T 必须是一个值类型(如 intboolDateTime 等)。

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()

这些约束帮助你在泛型编程中更精确地定义类型参数的使用条件,增强代码的健壮性和可读性。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。