国产探花免费观看_亚洲丰满少妇自慰呻吟_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的含義了。

總結

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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 玛纳斯县| 富顺县| 和政县| 宜黄县| 林周县| 石家庄市| 治多县| 库伦旗| 吐鲁番市| 和政县| 方城县| 吴堡县| 东城区| 鄂托克前旗| 清苑县| 麻栗坡县| 香河县| 湟中县| 丹凤县| 安福县| 故城县| 韶关市| 东源县| 临清市| 黑山县| 息烽县| 沁水县| 铜鼓县| 金华市| 永登县| 清涧县| 皋兰县| 邵武市| 安图县| 朝阳区| 惠安县| 丹凤县| 班戈县| 化隆| 如皋市| 安化县|