泛型的主约束和次约束2

假如一个泛型没有任何约束,那么它的应用是非常有限的,它不能对实参作任何类型上的保证,这时候就需要使用到泛型的约束:主约束 和 次约束

泛型的主约束和次约束均要求泛型的实参必须满足一定的规范。C#编译器在编译的过程中可以根据约束条件,对所有泛型的类型实参进行检查,以确保满足条件。

一个泛型参数可以至多拥有一个主约束,主约束可以是一个引用类型,类和结构。如果指定一个引用类型,则实参必须是该类型或者该类型的派生类型。

类规定了实参必须是一个引用类型

结构规定了实参必须是一个值类型

一个泛型可以有多个次约束,但同时拥有主约束和次约束的泛型参数,实参必须同时满足主约束和次约束。

View Code
//主要约束限定T继承自Exception类型
    public class ClassList<T> where T : Exception
    {
        private T tException;
        public ClassList(T t)
        {
            this.tException = t;
        }

        public override string ToString()
        {
            //主要约束保证了tException拥有source成员
            return tException.Source;
        }
    }

    //主要约束限定了T是引用类型
    public class ClassList2<T> where T : class
    {
        private T customT;
        public void Clear()
        {
            customT = null;
        }
    }

    //主要约束限定了T是值类型
    public class ClassTValue<T> where T : struct
    {
        private T customerT;
        public override string ToString()
        {
            //T是值类型,不会发生NullReferenceException异常
            return customerT.ToString();
        }
    }
原文地址:https://www.cnblogs.com/binyao/p/3043682.html