日落20190523003 - C#基础之泛型与约束

    xiaoxiao2023-08-13  136

    环境

    系统:Windows 10 引擎:VS2017

    笔记

    (1)约束的作用

    如果没有约束,泛型能做的事就只有赋值和调用一下Object定义的几个方法。 → 古有千里马遇伯乐,今有泛型遇约束。

    (2)虚泛型方法

    重写虚泛型方法时,不允许指定约束,因为只能继承原方法的约束。 → 继承者们

    (3)主要约束的指定

    没有指定主要约束,即默认为System.Object,但如果显示指定System.Object,就会报错error CS0702。 → 傲娇

    实例

    约束关键字
    using System; namespace GenericsConstraintTest { class Program { // 主要约束为值类型 internal sealed class PrimaryConstraintOfClass<T> where T : class { public static T Method() { return null; } } // 主要约束为引用类型 internal sealed class PrimaryConstraintOfStruct<T> where T : struct { public static T Method() { return new T(); } } // 做一个无参构造器约束,能通用于值类型和引用类型(but,只限于具有无参构造函数的引用类型) internal sealed class ConstructorConstraint<T> where T : new() { public static T Method() { return new T(); } } static void Main(string[] args) { var a1 = PrimaryConstraintOfClass<Object>.Method(); var a2 = PrimaryConstraintOfClass<String>.Method(); var b1 = PrimaryConstraintOfStruct<Int32>.Method(); var c1 = ConstructorConstraint<Object>.Method(); var c2 = ConstructorConstraint<String>.Method(); // 编译错误,构造器约束现在只用于无参构造函数,而String没有无参构造函数。 var d1 = ConstructorConstraint<Int32>.Method(); } } }

    以上简单回顾。

    参考资料:

    《CLR via C#(第3版)》第12.9节

    最新回复(0)