国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

泛型中協變和逆變

2019-11-17 01:56:41
字體:
來源:轉載
供稿:網友

泛型中協變和逆變

寫在前面

今天講的內容有點多,但是差不多都能聽懂,稍微有點模糊的就是協變和逆變的概念,下面是我結合在網上看的資料整合而成的。

正文

msdn上的原話:

協變:是指能夠使用比原始指定的派生類型的派生程度更小(不太確定)的類型

逆變:是指能夠使用比原始類型的派生類型的派生程度更大(更具體)的類型

在方便理解的概念是:

協變:子類向父類轉化,用于返回類型用out關鍵字

逆變:父類向子類轉化的過程,用于方法參數類型用in關鍵字

協變的例子:

 1   public class Person { } 2  3     public class Student : Person { } 4  5     public delegate T MyDelegate<out T>(); 6     class PRogram 7     { 8         static void Main(string[] args) 9         {10             MyDelegate<Student> student = () => new Student();11             MyDelegate<Person> person = student;12 13         }14     }
View Code

如果這里去掉out關鍵字就會報不能隱式轉化的錯誤

逆變的例子:

 1   public class Person { } 2  3     public class Student : Person { } 4  5     public interface IFly<in T> { } 6  7     public class FlyImp<T> : IFly<T> { }     8     public delegate T MyDelegate<T>(T t); 9     class Program10     {11         static void Main(string[] args)12         {13 14             IFly<Person> peson = new FlyImp<Person>();15             IFly<Student> student = peson;16         }17     }
View Code

如果這里IFly<in T>去掉in 后面也要報隱式轉換的錯誤哇,好神奇!

這里終于理解ms提供的2個委托:Action<in> 和Func<out> 里面的in和out的含義了。

總結

通過簡單的了解后,有了協變和逆變后,以后寫代碼可以更靈活,當然這是廢話,在敲代碼的過程中,雖然簡單但是還浪費不少時間,也發現自己眼高手低的毛病,以后要多多實踐了。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 杭州市| 台安县| 民丰县| 沙雅县| 瓦房店市| 丰都县| 余江县| 绿春县| 运城市| 灵丘县| 赤城县| 昭觉县| 井研县| 蒲城县| 黄平县| 舞阳县| 扎兰屯市| 洪湖市| 岳普湖县| 仪陇县| 滁州市| 女性| 哈尔滨市| 新乡市| 弥勒县| 岗巴县| 浮山县| 江北区| 温州市| 新化县| 丽江市| 乐山市| 资溪县| 游戏| 金湖县| 邢台县| 青冈县| 柘荣县| 盐城市| 平武县| 金昌市|