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

相关推荐
LYOBOYI1235 分钟前
qml练习:创建地图玩家并且实现人物移动(2)
开发语言·qt
电商API&Tina10 分钟前
【电商API接口】多电商平台数据API接入方案(附带实例)
运维·开发语言·数据库·chrome·爬虫·python·jenkins
1001101_QIA14 分钟前
【C++笔试题】递归判断数组是否是递增数组
开发语言·c++
zhangx1234_16 分钟前
C语言 题目2
c语言·开发语言
YJlio20 分钟前
网络与通信具总览(14.0):从 PsPing 到 TCPView / Whois 的联合作战
开发语言·网络·php
yong999021 分钟前
超宽带系统链路 MATLAB 仿真
开发语言·算法·matlab
yaoxin52112322 分钟前
278. Java Stream API - 限制与跳过操作全解析
java·开发语言·python
iCheney!26 分钟前
php生成赛博像素风头像
开发语言·php
短剑重铸之日30 分钟前
《深入解析JVM》第五章:JDK 8之后版本的优化与JDK 25前瞻
java·开发语言·jvm·后端
love530love33 分钟前
【探讨】“父级/基环境损坏,子环境全部失效”,如何避免 .venv 受父级 Python 损坏影响?
java·开发语言·人工智能·windows·python·编程·ai编程