可变类型形參列表(variant-type-parameter-lists)

  可变类型形參列表(variant-type-parameter-lists )仅仅能在接口和托付类型上出现。它与普通的type-parameter-lists的差异在于,它的每一个类型形參前面能够加上变化性批注:in和out。
  假设前面的变化性批注为out,则该类型形參成为协变类型形參;假设变化批注为in。则该类型形參成为逆变类型形參;假设不存在变化批注,则称该类型形參为固定类型形參
  比如:

interface C<out x ,in y ,z>
{x M(x,y);z P{get;set;}
}

  在上面的代码中,x为协变类型形參,y为逆变类型形參,z为固定类型形參。
  

类型形參变化安全性

  类型的类型形參列表中出现变化批注会限制类型在类型声明中能够出现的位置。假设存在下面情况之中的一个。则类型 T 是输出不安全 (output-unsafe) 的:
  ● T 为逆变类型形參
  ● T 为具有输出不安全元素类型的数组类型
  ● T 为从泛型类型 S< A1,… AK > 构造的接口或托付类型 S< X1, .. XK >,当中,对于至少一个 Ai,存在下面情况之中的一个:
  ● Xi 是协变或固定的。而 Ai 是输出不安全的。
  ● Xi 是逆变或固定的。而 Ai 是输入安全的。
假设存在下面情况之中的一个。则类型 T 是输入不安全 (input-unsafe) 的 :
  ● T 是协变类型形參
  ● T 是具有输入不安全元素类型的数组类型
  ● T 为从泛型类型 S< A1,… AK > 构造的接口或托付类型 S< X1, .. XK >,当中,对于至少一个 Ai,存在下面情况之中的一个:
  ● Xi 是协变或固定的,而 Ai 是输入不安全的。
  ● Xi 是逆变或固定的。而 Ai 是输出不安全的。

  从直观上看,应在输出位置上禁止使用输出不安全类型,在输入位置上禁止使用输入不安全类型。
  类型假设不是输出不安全的。则是输出安全 (output-safe) 的,假设不是输入不安全的。则是输入安全(input-safe) 的。即输入输出的安全性不存在出于安全和不安全之外的状态。

什么是类型參数

  类定义能够通过在类名后加入用尖括号括起来的类型參数名称列表来指定一组类型參数。类型參数可用于在类声明体中定义类的成员。在下面的演示样例中, Pair 的类型參数为 TFirst 和 TSecond:

public class Pair<TFirst,TSecond>
{public TFirst First;public TSecond Second;
}

  要声明为採用类型參数的类类型称为泛型类类型。结构类型、接口类型和托付类型也能够是泛型。当使用泛型类时。必须为每一个类型參数提供类型实參:

Pair<int,string> pair = new Pair<int,string> { First = 1, Second = “two” };
int i = pair.First; // TFirst is int
string s = pair.Second; // TSecond is string

  提供了类型实參的泛型类型(比如上面的 Pair< int,string >)称为构造的类型。

转载于:https://www.cnblogs.com/yutingliuyl/p/7121222.html

[深入学习C#]输入输出安全性——可变类型形參列表的变化安全性相关推荐

  1. Python基础day05【函数(局部变量、全局变量、多函数执行流程、函数返回值、函数参数)、拆包、引用、可变与不可变类型、函数注意事项】

    视频.源码.课件.软件.笔记:超全面Python基础入门教程[十天课程]博客笔记汇总表[黑马程序员] Python基础day05[函数(函数传参的两种形式.函数形参).拆包.引用.可变与不可变类型.引 ...

  2. python可变类型和不可变深浅拷贝类型_python3笔记十四:python可变与不可变数据类型+深浅拷贝...

    一:学习内容 python3中六种数据类型 python赋值 python浅拷贝 python深拷贝 二:python3六种数据类型 1.六种数据类型 Number(数字) string(字符串) L ...

  3. python中的不可变类型和可变类型

    在python中整形,字符串,元组是不可变类型,而列表和字典都是可变类型. 对于不可变类型进行重新赋值,相当于是用以前的变量名重新指向了新的地址,这个地址中存的变量值就是重新的赋值 通过python中 ...

  4. python可变类型和不可变深浅拷贝类型_理解python可变类型vs不可变类型,深拷贝vs浅拷贝...

    核心提示: 可变类型 Vs 不可变类型 可变类型(mutable):列表,字典 不可变类型(unmutable):数字,字符串,元组 这里的可变不可变,是指内存中的那块内容(value)是否可以被改变 ...

  5. python不可变的列表被称为_【Python学习】可变类型和不可变类型

    一.可变类型与不可变类型的特点 1.不可变数据类型 不可变数据类型在第一次声明赋值声明的时候, 会在内存中开辟一块空间, 用来存放这个变量被赋的值,  而这个变量实际上存储的, 并不是被赋予的这个值, ...

  6. c#编译时提高兼容性_幻像类型提高了编译时的安全性

    c#编译时提高兼容性 介绍 使用幻像类型是一种非常简单的技术,可用于提高代码的编译时安全性. 有很多潜在的用例,其复杂性程度各不相同,但是即使幻像类型的轻量级使用也可以显着提高编译时的安全性. 幻像类 ...

  7. 幻像类型提高了编译时的安全性

    介绍 使用幻像类型是一种非常简单的技术,可用于提高代码的编译时安全性. 有许多潜在的用例具有不同的复杂性级别,但是即使幻像类型的使用非常轻巧,也可以显着提高编译时的安全性. 幻像类型只是带有未使用类型 ...

  8. Java学习第十二天----方法参数类型以及返回值类型问题、链式编程、package包、权限修饰符、内部类、成员内部类

    Java学习第十二天----方法参数类型以及返回值类型问题.链式编程.package包.权限修饰符.内部类.成员内部类 1.方法参数类型: (1)类名作为形式参数: public class MyTe ...

  9. 佩伯尔幻像_幻像类型提高了编译时的安全性

    佩伯尔幻像 介绍 使用幻像类型是一种非常简单的技术,可用于提高代码的编译时安全性. 有很多潜在的用例具有不同的复杂性级别,但是即使幻像类型的轻量级使用也可以显着提高编译时的安全性. 幻像类型只是带有未 ...

  10. Java可变类型与不可变类型

     一.可变类型(mutable type)与不可变类型(immutable type) 已知,基本数据类型都是不可变类型:引用(对象)数据类型既有可变类型,也有不可变类型 首先区分:改变一个变量.改变 ...

最新文章

  1. linux上最好用的sh --zsh
  2. python基础-分支判断语句(4)
  3. 显示和隐藏系统任务栏的类
  4. Windows下VS2013 C++编译测试faster-rcnn
  5. java数组-如何在一堆数据中使用数组!
  6. P2817 宋荣子的城堡
  7. (LeetCode 141/142)Linked List Cycle
  8. JSON和XML:它们如何比较?
  9. 推销员(codevs 5126)
  10. mocha.js 生成覆盖率报告
  11. java过载保护_微服务过载保护原理与实战
  12. c语言素数环实验报告,c语言素数环问题实例讲解
  13. php常用函数最全总结
  14. [计算机系统-01] 计算机系统漫游
  15. Unity3d游戏引擎Windy系列教程:常见组件扫盲讲解引入unity所需的脚本语言基础
  16. 平面设计师笔试题应答技巧|智测优聘总结
  17. 心田花开:七年级语文第一单元《济南的冬天》知识点汇总
  18. 中国乳制品行业消费品牌形势与竞争格局展望报告2022版
  19. springboot2核心技术与响应式编程(一)
  20. idea vue.js插件安装

热门文章

  1. Linux安装后的基本配置
  2. 记一次坑爹的广工校赛
  3. html的那些小小细节
  4. POJ2031Building a Space Station
  5. IOS 改变导航栏返回按钮的标题
  6. Android_View,ViewGroup,Window之间的关系
  7. Machine Learning(Andrew)Week6(上)
  8. pdf expert使用教程:如何在mac上给PDF怎么调整页面顺序
  9. Next.js 服务端渲染框架实战
  10. Android Studio如何打jar包