CSharp Basic Tutorial Chapter-3-12 泛型约束 子类 自引用 静态数据 转换


泛型的约束

  • 默认情况下,泛型的类型参数(parameter)可以是任何类型的。
  • 如果只允许使用特定的类型参数(argument),就可以指定约束。

constraint

泛型约束 例子

Constraintcase

泛型约束

genericconstraint
genericconstraint2
T是不可空的值类型 这个泛型代表了可空值类型

genericconstraint3
T有一个无参的构造函数 可以new

裸类型约束

Netconstraint

泛型类型的子类

  • 泛型class可以有子类,在子类里,可以继续让父类的类型参数保持开放
class Stack  {...}
class SpecialStack {...}
  • 在子类里,也可以使用具体的类型来关闭(封闭)父类的类型参数
class InStack: Stack{...}
  • 子类型也可以引入新的类型参数
class List
class KeyedList:List{..}

泛型类型的子类

  • 技术上来讲,所有子类的类型参数都是新鲜的。你可以认为子类先把父类的类型参数(argument)给关闭了,然后又打开了。为这个先关闭后打开的类型参数(argument)带来新的名称或含义。
class List{...}
class KeyedList:List{..}

自引用的泛型声明

  • 在封闭类型参数(argument)的时候,该类型可以把它自己作为具体的类型。

selfreference

静态数据

  • 针对每一个封闭类型,静态数据是唯一的

staticdata

类型参数和转换

  • C#的转换操作符支持下列转换:
  • 数值转换
  • 引用转换
  • 装箱拆箱转换
  • 自定义转换
  • 决定采用的是哪种转换,发生在编译时,根据已知类型的操作数来决定。

类型参数和转换

Typechange
Typechange2


文章作者: Chaoqiang
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Chaoqiang !
评论
 上一篇
CSharp Basic Tutorial Chapter-3-13 协变  逆变  不变 CSharp Basic Tutorial Chapter-3-13 协变 逆变 不变
Covariance, Contravariance, Invariance T 既作为输入 又作为输出 是不对的 危险的 Covariance 协变,当值作为返回值/out 输出 Contravariance 逆变,当值作为输入
下一篇 
CSharp Basic Tutorial Chapter-3-11 泛型为什么存在  类型参数  默认值 CSharp Basic Tutorial Chapter-3-11 泛型为什么存在 类型参数 默认值
泛型简介泛型的作用 跨类型可复用的代码:继承 和 泛型。 继承 –> 基类 泛型 –> 带有“(类型)占位符” 的“模板” 泛型类型(Generic Types) 泛型会声明类型参数 – 泛型的消费者需要提供类型参数(argu
  目录