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() 约束类型参数必须具有无参数的公共构造函数。通过使用泛型约束,可以确保类型参数满足特定的条件,从而在编译时捕获错误并提供更安全和可靠的代码。

相关推荐
aramae1 小时前
MySQL复合查询(8)
java·c语言·开发语言·后端·算法
淡海水2 小时前
13-04-面试-源码级深度追问链
数据结构·unity·面试·c#·游戏引擎·源码·il2cpp
asdzx673 小时前
如何使用 C# 提取 PPT 文本与图片
c#·ppt·提取文本
qq_2518364573 小时前
springboot vue3 开发实现 拼豆管理系统
java·开发语言·ai编程
郑州光合科技余经理4 小时前
同城外卖小程序开发:下单成功后,后台导出能不能对上用户端状态
开发语言·前端·git·后端·uni-app·php·ai编程
知识分享小能手5 小时前
C++ 学习教程,从入门到精通,C++ 入门知识 — 完整知识点(1)
开发语言·c++·学习
+VX:Fegn08955 小时前
计算机毕业设计|基于springboot + vue旅游管理系统(源码+数据库+文档)
java·开发语言·vue.js·spring boot·课程设计
阿里嘎多学长6 小时前
2026-09-20 GitHub 热点项目精选
开发语言·程序员·github·代码托管
weixin_307779137 小时前
C++代码实现MATLAB中的ode23tb函数功能
开发语言·c++·算法·matlab
2601_966949658 小时前
为什么量化回测中 for 循环比 DataFrame 慢三个数量级?从向量化原理讲起
开发语言·python·pandas·股票数据·quantdash