第十二章 泛型

     泛型大家用的很广泛,也很重要。涉及有泛型方法、接口至于具体怎么使用百度下随便写几个Demo 实践下自然就懂。

      说一些实用的:

一、System.Collections.Concurrent

     这个是线程安全的集合,里面包含了多种线程安全的集合类,为什么要用这个,因为我们用普通的List,Queue、Dictionary 在多线程下都会出现问题因此用这个线程安全的集合类就可以解决此类问题,他们内部也是通过实现锁的机制,只不过是框架帮我们实现的。

二、具有泛型参数的类型分为2种:

    开放类型:显然就是开放的谁都可以进来 反应在泛型中就是没有具体明确T的类型 eg:List<T>

    封闭类型:指明了泛型参数的T类型。List<string>  

    类型实参:

     依据泛型类型参数分为

       不变量:参数类型明确指定了没有别的修饰符,就是常用的常设计的泛型参数

                    逆变量:参数可以从一个类变为它的派生类。就是基类出现的地方用子类。用in 标 记 你可以理解为 父类创建的基业,内部子类逆反上位了。就发生了逆变。

       协变量:参数从类转为他的某个基类 用out 标记 就是子类出现的地方可以用基 类,你可以理解为就是子类出去征战然后协助父类上位,就是协变

 

       记不住没关系,不要紧,一般设计用不到,来张图解释下

 

        数字1处所示:参数类型我们看好是泛型的 T和 TResult 分别用 in 和out 参数修饰,那么意思就是这个

     参数 T是逆变的(可以由子类代替) 用 in修饰

     参数 TResult 是斜边的用 out修饰 可以用基类代替。

       数字2所示:
     定义了该委托 fn1 ,所需参数是 Object(逆变的可以用子类代替 string是Objcect的子类)

             还有ArgumentException是协变的(可以用基类代替)Exception是所有异常基类

             因此图3处可以成立。

三、约束

            约束至少可以一个,也可以么有、主要约束一个。次要约束多个。

 

           其他知识点个人觉得实战性不高。不贪多,要贪实用性、基础性。

原文地址:https://www.cnblogs.com/LiMin/p/10847799.html