zoukankan      html  css  js  c++  java
  • [深入学习C#]输入输出安全性——可变类型形參列表的变化安全性

    可变类型形參列表(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 >)称为构造的类型。

  • 相关阅读:
    如何量化用户体验UE(How To Quantify The User Experience)[网摘]
    完美简单的loading外部文件.
    FLV播放器 源码二例
    让你的网站上实时更新各大网站的新闻
    我的第一次涂鸦
    Alan Cooper 的交互设计观 [网摘]
    把视频文件自动的在服务器端转换成FLV文件的FFMPEG的编译方法[网摘]
    ASP.NET 页面生命周期
    ASP.NET MVC Area操作
    浅谈DataAnnotations
  • 原文地址:https://www.cnblogs.com/yutingliuyl/p/7121222.html
Copyright © 2011-2022 走看看