①泛型接口,若是泛型類型前沒有關鍵字out或者in來標註,則該泛型接口不支持抗變和協變,即只能是什麼對象指向什麼類型。html
②若是泛型接口,泛型類型前有關鍵字out標註,則表示其方法的輸出爲T類型,也就是方法的返回值。同時該泛型接口支持協變,即,能夠用父類的類型指向子類的對象。express
③若是泛型接口,泛型類型前面有關鍵字in標註,則表示其方法的輸入爲T類型,也就是方法的參數。該泛型接口支持抗變,也就是能夠用子類的類型指向父類的對象。函數
yield 關鍵字向編譯器指示它所在的方法是迭代器塊。編譯器生成一個類來實現迭代器塊中表示的行爲。在迭代器塊中,yield 關鍵字與 return 關鍵字結合使用,向枚舉器對象提供值。這是一個返回值,例如,在 foreach 語句的每一次循環中返回的值。yield 關鍵字也可與 break 結合使用,表示迭代結束。post
例子: yield return <expression>; yield break;this
組元(Tuple)是C# 4.0引入的一個新特性,能夠在.NET Framework 4.0或更高版本中使用。組元使用泛型來簡化類的定義,多用於方法的返回值。在函數須要返回多個類型的時候,就沒必要使用out , ref等關鍵字了,直接定義一個Tuple類型,使用起來很是方便。url
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);