C#教程

关注公众号 jb51net

关闭
首页 > 软件编程 > C#教程 > C#泛型约束

C#中常见的五大泛型约束举例详解

作者:CSharp笔记记录

泛型是C# 2.0引入的核心特性,它允许在定义类、接口、方法、委托等时使用未指定的类型参数,在使用时再指定具体类型,这篇文章主要介绍了C#中常见的五大泛型约束的相关资料,需要的朋友可以参考下

前言

在 C# 中,泛型(Generics)允许你定义类型安全且可重用的代码,而不必指定具体的类型。为了更精确地控制泛型类型的行为,可以使用泛型约束(Generic Constraints)来限制泛型类型参数的类型。泛型约束通过 where 关键字来实现。

以下是 C# 中常见的 五大泛型约束,它们有助于限定泛型参数的类型特性:

1.where T : struct

值类型约束

这个约束指定 T 必须是值类型。值类型包括结构体(struct)、枚举(enum)以及基本数据类型(如 int, float, bool 等)。

应用场景

示例

public void PrintValueType<T>(T value) where T : struct
{
    Console.WriteLine(value);
}

限制

2.where T : class

引用类型约束

这个约束指定 T 必须是引用类型。引用类型包括所有类、接口、委托等。

应用场景

示例

public void PrintReferenceType<T>(T value) where T : class
{
    Console.WriteLine(value.ToString());
}

限制

3.where T : new()

无参数构造函数约束

这个约束要求 T 必须有一个无参构造函数。通过这个约束,确保你能够在泛型方法或类中使用 new 运算符来创建 T 类型的实例。

应用场景

示例

public T CreateInstance<T>() where T : new()
{
    return new T();
}

限制

4.where T : BaseClass

基类约束

这个约束指定 T 必须是 BaseClass 类型或其派生类型。也就是说,T 必须继承自某个指定的类。

应用场景

示例

public void PrintBaseClass<T>(T obj) where T : BaseClass
{
    obj.PrintInfo();
}

限制

5.where T : IInterface

接口约束

这个约束指定 T 必须实现某个接口。通过这种方式,可以确保泛型类型实现了接口中的方法和属性。

应用场景

示例

public void PrintComparable<T>(T obj) where T : IComparable
{
    int result = obj.CompareTo(default(T));
    Console.WriteLine($"Comparison result: {result}");
}

限制

组合多个约束

你还可以将多个约束组合起来使用。例如,你可以要求 T 同时满足多个条件:

public void ProcessData<T>(T obj) where T : class, IComparable, new()
{
    // 类型 T 必须是引用类型、实现了 IComparable 接口,并且有一个无参构造函数
}

到此这篇关于C#中常见五大泛型约束的文章就介绍到这了,更多相关C#泛型约束内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文