c# 泛型约束

在C#中,泛型约束用于指定泛型类型参数的限制条件,以确保类型参数满足特定的条件。以下是C#中常见的泛型约束:

where T : struct: 这个约束要求类型参数必须是一个值类型(如int、float等)。

where T : class: 这个约束要求类型参数必须是一个引用类型(如类、接口、委托等)。

where T : new(): 这个约束要求类型参数必须具有一个无参数的公共构造函数。

where T :: 这个约束要求类型参数必须是指定的基类或派生自指定的基类。

where T :: 这个约束要求类型参数必须实现指定的接口。

where T : U: 这个约束要求类型参数必须与指定的类型参数(U)相同,或者是从指定的类型参数(U)派生的类型。

这些约束可以单独使用,也可以组合使用。例如,下面的示例演示了如何使用多个约束:

csharp 复制代码
public interface IExampleInterface
{
    void ExampleMethod();
}
//ExampleClass的泛型必须要实现IEampleInterface的接口,且默认带无参构造函数
public class ExampleClass<T> where T : IExampleInterface, new()
{
    public void ExampleMethod(T exampleObject)
    {
        exampleObject.ExampleMethod();
    }
}

public class ExampleImplementation : IExampleInterface
{
    public void ExampleMethod()
    {
        Console.WriteLine("ExampleMethod called");
    }
}

static void Main(string[] args)
{
    ExampleClass<ExampleImplementation> example = new ExampleClass<ExampleImplementation>();
    example.ExampleMethod(new ExampleImplementation());
}

在这个示例中,ExampleClass是一个泛型类,使用了两个约束:where T : IExampleInterface 约束类型参数必须实现 IExampleInterface 接口,where T : new() 约束类型参数必须具有无参数的公共构造函数。通过使用泛型约束,可以确保类型参数满足特定的条件,从而在编译时捕获错误并提供更安全和可靠的代码。

相关推荐
雨落倾城夏未凉4 天前
第四章c#方法-参数数组和可选参数(16)
后端·c#
唐青枫5 天前
线程不是越多越快:C#.NET Thread 生命周期、同步与后台工作线程实战
c#·.net
唐青枫6 天前
别只会反射:C#.NET Emit 动态生成代码实战详解
c#·.net
咕白m6256 天前
.NET 环境下 Word 超链接批量提取方案
c#·.net
用户91721561902116 天前
C# 通信协议增量解析:用状态机处理半包和粘包
c#
小码编匠7 天前
C# 工控上位机必备:数据转换工具类与十个核心模块
后端·c#·.net
唐青枫9 天前
别再乱用 StartNew:C#.NET TaskFactory 任务调度实战详解
c#·.net
Artech9 天前
[MAF预定义的AIContextProvider-03]ChatHistoryMemoryProvider——赋予Agent从经验中学习的能力
ai·c#·agent·memory·maf
Scout-leaf11 天前
C#摸鱼实录——IoC与DI案例详解
c#
咕白m62511 天前
使用 C# 在 Excel 中应用多种字体样式
后端·c#