C#高级编程第10版 note

 

①泛型接口,如果泛型类型前没有关键字out或者in来标注,则该泛型接口不支持抗变和协变,即只能是什么对象指向什么类型。

②如果泛型接口,泛型类型前有关键字out标注,则表示其方法的输出为T类型,也就是方法的返回值。同时该泛型接口支持协变,即,可以用父类的类型指向子类的对象。

③如果泛型接口,泛型类型前面有关键字in标注,则表示其方法的输入为T类型,也就是方法的参数。该泛型接口支持抗变,也就是可以用子类的类型指向父类的对象。

 

yield 关键字向编译器指示它所在的方法是迭代器块。编译器生成一个类来实现迭代器块中表示的行为。在迭代器块中,yield 关键字与 return 关键字结合使用,向枚举器对象提供值。这是一个返回值,例如,在 foreach 语句的每一次循环中返回的值。yield 关键字也可与 break 结合使用,表示迭代结束。

例子: yield return <expression>; yield break;

  • tuple

组元(Tuple)是C# 4.0引入的一个新特性,可以在.NET Framework 4.0或更高版本中使用。组元使用泛型来简化类的定义,多用于方法的返回值。在函数需要返回多个类型的时候,就不必使用out , ref等关键字了,直接定义一个Tuple类型,使用起来非常方便。

复制代码
 1     //1 member
 2     Tuple<int> test = new Tuple<int>(1);
 3     //2 member ( 1< n <8)
 4     Tuple<int, int> test2 = Tuple.Create<int, int>(1, 2);
 5     //8 member, the last member must be tuple type.
 6     Tuple<int, int, int, int, int, int, int, Tuple<int>> test3
 7             = new Tuple<int, int, int, int, int, int, int, Tuple<int>>(1, 2, 3, 4, 5, 6, 7, new Tuple<int>(8));
 8 
 9     //output
10     Console.WriteLine(test.Item1);
11     Console.WriteLine(test2.Item1 + ", " + test2.Item2);
12     Console.WriteLine(test3.Item1 + ", " + test3.Item2 + ", " + test3.Item3 + ", " + test3.Item4
13             + ", " + test3.Item5 + ", " + test3.Item6 + ", " + test3.Item7 + ", " + test3.Rest.Item1);
复制代码
posted @ 2018-11-15 17:02  Marco CAO  阅读(384)  评论(0编辑  收藏  举报