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

相关推荐
samble5 小时前
从零搭建灌装监控系统(十七):LiveCharts 实时温度曲线
c#·wpf·mvvm·modbus·工业控制
kimnoic5 小时前
Python数据库学习心得:SQLite、MySQL、PostgreSQL优缺点
开发语言·python
必须得开心呀6 小时前
python编写带界面的软件,需要安装哪些插件
开发语言·python
沫璃染墨8 小时前
《Qt从零入门系列(十三):QSS样式表详解——从选择器与层叠规则到控件美化实战》
开发语言·css·c++·qt·ui·qt6.3·qss
达子6668 小时前
RUST 图解 第 3 章:通用编程概念(Common Programming Concepts)
开发语言·算法·rust
道尔柯南9 小时前
C++ 面向对象编程入门:类和对象(上)
开发语言·c++·算法
楠楠子呀9 小时前
英语、西语、阿语客户各开一个口:多语言获客的分流方案
开发语言·javascript·ecmascript·跨境电商·whatsapp·营销工具
tachibana29 小时前
使用for range 的时候,它的地址会发生变化吗?
开发语言·后端·golang·go·语法
临床数据科学和人工智能兴趣组10 小时前
正则表达式的基础语法的基本符号
开发语言·人工智能·python·正则表达式·r语言·r语言-4.2.1·workbudyy
王中阳Go10 小时前
Go 后端转 AI:非科班怎么补?一张 3 列路线表(可保存)
开发语言·人工智能·后端·python·golang·大语言模型