福田网站建设团队,怎样进入拼多多平台卖东西,超炫网站欣赏,wordpress创建自定义页面模板C#—泛型约束
概念#xff1a;
泛型约束就是告知编译器类型参数必须具备的功能。 在没有任何约束的情况下#xff0c;类型参数可以是任何类型。 编译器只能假定 System.Object 的成员#xff0c;它是任何 .NET 类型的最终基类。当分配给泛型的类型参数不满足约束的类型时
泛型约束就是告知编译器类型参数必须具备的功能。 在没有任何约束的情况下类型参数可以是任何类型。 编译器只能假定 System.Object 的成员它是任何 .NET 类型的最终基类。当分配给泛型的类型参数不满足约束的类型时编译器会报出 Compiler Error CS0452 的错误。在 C# 中允许使用 where 上下文关键字指定约束让泛型的类有一定的限制。 示列
// 值类型约束
class Test1T where T:struct
{public T value;public void TestFunK(K v) where K:struct { }
}// 实现
Test2Random t2new Test2Random();
t2.valuenew Random();
t2.TestFunobject(new object()); 约束类型 一 值类型泛型约束
只允许泛型为值类型 (T 只能是值类型) public void F1T(T a) where T : struct { } 二 引用类型泛型约束:
只允许泛型为引用类型(T 只能是引用类型) public void F2T(T a) where T : class { } 三 指定引用类型泛型约束:
只允许泛型为该类或子类(T 只能是A或者A的子类) public void F3T(T a) where T : A { } 四 必须为无参构造
①必须是无参构造函数如果结构体中编写有参函数无参构造函数不会被顶替。 ②必须是公共的 ③必须是非抽象类型因为抽象类型不能够去new它。 public void F4T(T a) where T : new() { } 五 多约束使用
多个泛型约束用where连接即可 class Test8T,K where T:class, new() where K:struct { } 六 自定义约束
T的只能是U提供的类型或者U的子类T要么是U类型要么是U子类 public void F5T, U(T a, U b) where T : U { } 在可为 null 的上下文中如果 U 是不可为 null 的引用类型T 必须是不可为 null 的引用类型。 如果 U 是可为 null 的引用类型则 T 可以是可为 null 的引用类型也可以是不可为 null 的引用类型。 七 接口的泛型约束
只允许泛型为实现这个接口的类或者子类(T 只能是Boy类型 或者Boy的子类) public void F4T(T a) where T : IMan { } 八 可为空接口类型约束:接口名称?
表示类型参数必须是指定的接口或实现指定的接口 public void F4T(T a) where T : IMan ? { } 九 可为空引用类型约束: class? where T : class? 表示类型参数必须是可为 null 或不可为 null 的引用类型。 十 不可为空约束: notnull where T : notnull 表示类型参数必须是不可为 null 的类型。 十一 基方法约束: default where T : default 表示重写方法或提供显式接口实现时如果需要指定不受约束的类型参数此约束可解决歧义。 十二 非托管类型约束: unmanaged where T : unmanaged 表示类型参数必须是不可为 null 的非托管类型。 十三 可为空基类名约束: 基类名? where T :基类名? 表示类型参数必须是指定的基类或派生自指定的基类。 此篇文章部分借鉴与网络如有冒犯请联系删除