c# 泛型 束缚关系和default

来源:互联网 发布:网络是把双刃剑章郑 编辑:程序博客网 时间:2024/06/09 20:55

在泛型类和泛型方法中产生的一个问题是,在预先未知以下情况时,如何将默认值分配给参数化类型 T:

  • T 是引用类型还是值类型。

  • 如果 T 为值类型,则它是数值还是结构。

给定参数化类型 T 的一个变量 t,只有当 T 为引用类型时,语句 t = null 才有效;只有当 T 为数值类型而不是结构时,语句 t = 0 才能正常使用。 解决方案是使用 default 关键字,此关键字对于引用类型会返回 null,对于数值类型会返回零。 对于结构,此关键字将返回初始化为零或 null 的每个结构成员,具体取决于这些结构是值类型还是引用类型。 对于可以为 null 的值类型,默认返回 System.Nullable(Of T),它像任何结构一样初始化。


约束说明where T: struct类型参数必须是值类型。 可以指定除 Nullable 以外的任何值类型。 有关更多信息,请参见使用可以为 null 的类型(C# 编程指南)。where T : class类型参数必须是引用类型;这一点也适用于任何类、接口、委托或数组类型。where T : new()类型参数必须具有无参数的公共构造函数。 当与其他约束一起使用时,new() 约束必须最后指定。where T : <base class name>类型参数必须是指定的基类或派生自指定的基类。where T : <interface name>类型参数必须是指定的接口或实现指定的接口。 可以指定多个接口约束。 约束接口也可以是泛型的。where T : U为 T 提供的类型参数必须是为 U 提供的参数或派生自为 U 提供的参数。
0 0
原创粉丝点击