欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 国际 > C#泛型相关

C#泛型相关

2024/10/28 12:01:29 来源:https://blog.csdn.net/qq_37237487/article/details/141759103  浏览:    关键词:C#泛型相关

什么是泛型?

泛型是C#2.0版本和公共语言运行库 (CLR) 中的一个非常重要的新功能。泛型就是类型参数化,用于处理的数据类型不固定的情况下,将类型作为参数传入。

使用泛型的好处?

  • 代码复用:我们一套代码可以支持不同的类型。
  • 降低了耦合性:代码逻辑和数据类型之间分离,实现了解耦。
  • 更好的可读性:我们在使用集合的时候,定义了一个list 如List<string>,一看便知道这个一个存放string类型的list。
  • 程序性能提高:在一定的程度上减少了类型转换装箱与拆箱操作带来的性能损耗。
  • 类型安全性增强:泛型可以在编译时捕获类型错误,使得代码更加安全。编译器会在编译时检查泛型类型的使用,避免了在运行时发生类型错误的可能性,从而减少了程序出错的风险。

泛型使用where约束的原因是什么?

约束指定类型参数的功能和预期。

C#泛型类型参数约束有哪些?

详情阅读:类型参数的约束 - C# | Microsoft Learn

约束

描述

where T : struct

类型参数必须是不可为 null 的值类型

。 有关可为 null 的值类型的信息,请参阅可为 null 的值类型

。 由于所有值类型都具有可访问的无参数构造函数,因此 struct 约束表示 new() 约束,并且不能与 new() 约束结合使用。 struct 约束也不能与 unmanaged 约束结合使用。

where T : class

类型参数必须是引用类型。 此约束还应用于任何类、接口、委托或数组类型。 在 C#8.0 或更高版本中的可为 null 上下文中,T 必须是不可为 null 的引用类型。

where T : class?

类型参数必须是可为 null 或不可为 null 的引用类型。 此约束还应用于任何类、接口、委托或数组类型。

where T : notnull

类型参数必须是不可为 null 的类型。 参数可以是 C# 8.0 或更高版本中的不可为 null 的引用类型,也可以是不可为 null 的值类型。

where T : default

重写方法或提供显式接口实现时,如果需要指定不受约束的类型参数,此约束可解决歧义。 default 约束表示基方法,但不包含 class 或 struct 约束。 有关详细信息,请参阅约束规范建议。

where T : unmanaged

类型参数必须是不可为 null 的非托管类型

。 unmanaged 约束表示 struct 约束,且不能与 struct 约束或 new() 约束结合使用。

where T : new()

类型参数必须具有公共无参数构造函数。 与其他约束一起使用时,new() 约束必须最后指定。 new() 约束不能与 struct 和 unmanaged 约束结合使用。

where T :where T :

类型参数必须是指定的基类或派生自指定的基类。 在 C# 8.0 及更高版本中的可为 null 上下文中,T 必须是从指定基类派生的不可为 null 的引用类型。

where T :where T :

类型参数必须是指定的基类或派生自指定的基类。 在 C# 8.0 及更高版本中的可为 null 上下文中,T 可以是从指定基类派生的可为 null 或不可为 null 的类型。

where T :where T :

类型参数必须是指定的接口或实现指定的接口。 可指定多个接口约束。 约束接口也可以是泛型。 在 C# 8.0 及更高版本中的可为 null 上下文中,T 必须是实现指定接口的不可为 null 的类型。

where T :where T :

类型参数必须是指定的接口或实现指定的接口。 可指定多个接口约束。 约束接口也可以是泛型。 在 C# 8.0 中的可为 null 上下文中,T 可以是可为 null 的引用类型、不可为 null 的引用类型或值类型。 T 不能是可为 null 的值类型。

where T : U

为 T 提供的类型参数必须是为 U 提供的参数或派生自为 U 提供的参数。 在可为 null 的上下文中,如果 U 是不可为 null 的引用类型,T 必须是不可为 null 的引用类型。 如果 U 是可为 null 的引用类型,则 T 可以是可为 null 的引用类型,也可以是不可为 null 的引用类型。

参考文章

类型参数的约束 - C# | Microsoft Learn

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com