zoukankan      html  css  js  c++  java
  • 泛型的主约束和次约束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();
            }
        }
  • 相关阅读:
    数据库设计中的四个范式(转)
    几个SQL
    一个整形数组,找其中第二大值
    装箱与拆箱
    继承与隐藏方法
    C++/C# 最基本的Marshal和Ptr
    C++/C#结构体转化-传string给C++
    C++/C#结构体转化-二维数组-bytes To Strings
    C# 懒人常用异步方法
    jsplumb 的初次使用
  • 原文地址:https://www.cnblogs.com/binyao/p/3043682.html
Copyright © 2011-2022 走看看