zoukankan      html  css  js  c++  java
  • 2018-7-26-随笔-泛型

    类型不是对象,而是对象的模板

    泛型不是类型,而是类型的模板

    泛型:

    1.c#中的泛型只在类、结构、接口、委托、方法中有

    泛型类:

    创建“构造类型”===就是给”类型参数“赋予”类型实参“

    泛型类的构造出的类型都是不同的并且相互独立的

    泛型的使用使得代码减少便于维护,但是不容易写,因为太抽象

    类型参数的约束:

    就是给泛型的“T”一个限定条件,让编译器知道什么类型可以用什么类型不可以用-------约束

    泛型中不能处理一些类型的对象,或者不是object的派生类,否则会报错

    where语句:

    约束都是用where语句列出的,多个约束就用逗号分隔。  多个where语句间没有什么间隔符

    where语句没有任何的次序,但是语句的内部有严格的顺序:类名---class(引用类型)---struct(值类型)---接口名---new()(无参构造的类型)

    主约束只能有一个(前三个),接口可以有多个,构造约束只能放在最后。

    泛型方法:

    可以在泛型和非泛型的类、接口、结构中 

    泛型方法也可以有约束子句,

    泛型方法中如果泛型方法的方法参数和泛型参数一样,在实例调用时就可以不用写出泛型的实参类型

    例如:

    public void MyMethod <T> (T myVal){}

    int myInt = 2;

    MyMethon<int>(myInt);-------------正常书写

    MyMethon(myInt);----------------简写,推断类型,这样书写编译器可以推断出这个方法的泛型和方法参数是一样的,所以不用写出来了。

    泛型类和扩展方法:

    理解:在使用一个类时,先定义个静态类(static)类,在这个类中书写一个静态方法(static),方法的参数就是以要使用类类型,不过必须要有this关键字(this Holder<T> h),然后在我们实例要使用的类,就可以直接类的对象调用才写的类方法。调用时不需要参数的,因为就是这个类型对象调用的。

    泛型结构:

    和泛型类一样

    泛型委托:

    参数类型<形参类型,返回值类型>,也可以有约束条件

    C#中的两个泛型委托:FUNC(T,result)有返回值的  Action(T)没有返回值的

    泛型接口:

    泛型的接口,要不是方法参数“泛型”,要不就是返回值”泛型“,要不就是都”泛型“

    泛型接口最好是泛型类来实现,如果是非泛型类实现,就会在实现的时候写明一个唯一的类型实参(那还定义泛型干嘛)!!!

    泛型接口名称和非泛型接口名称不会冲突的

    实现泛型接口时要注意防止出现类型实参相同的情况,否则会出现方法一样的情况出现报错

    协变:

    派生类对象可以赋值给基类的变量这是赋值兼容性。 派生类的引用赋值给基类变量

    当派生类的委托实现赋值,再把派生类的委托赋值给基类的委托,发现这个是不行的!!!!因为这是两个委托,理论上是两个不一样的委托没有什么关系的。没有继承关系的,这时的赋值是不会成功的。这是的同级使得不能赋值。在泛型委托中的泛型参数中加”out“,就可以编译成功。

    这样的只用返回值类的类型参数的皆可用派生类创建的委托类型 叫做协变

    在泛型参数中用”in“,并且委托是只有泛型参数的,叫做逆变 

    在泛型接口被实现了,在可以把实现类的对象直接赋值于接口的对象,前提方法的方法参数就接口引用类型

    在没有发生任何赋值时,系统会自动的识别并且判断就可以强制装换了

    变化的处理就是使用派生类和基类的安全情况,因此变化只适用于引用类型

    显示变化“IN”和“OUT”关键字只使用于委托和接口。

    不包括的“IN”和“OUT”关键字的委托和接口叫做不变;

  • 相关阅读:
    区间DP中的环形DP
    hdu 5251 包围点集最小矩形 ***
    hdu 4858 水题
    hdu 3530 单调队列 **
    hdu 3338 最大流 ****
    hdu 2732 最大流 **
    hdu 5233 离散化 **
    hdu 3555 数位dp *
    zoj 3469 区间dp **
    2015 安徽程序设计省赛总结
  • 原文地址:https://www.cnblogs.com/liuqifeng/p/9370143.html
Copyright © 2011-2022 走看看