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

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

07.C#泛型的限制和可空類型的簡單說明(三章3.5-四章4.1)

2019-11-17 02:40:48
字體:
來源:轉載
供稿:網友

07.C#泛型的限制和可空類型的簡單說明(三章3.5-四章4.1)

  自己在寫文章的同時,也是在學習,對于書中的語句很多其實沒有太好的理解,讀一本書,要消化!!!三章都是講泛型的,最后寫一下泛型的限制,對于本章學習的完結,one end,one begin.

  看下面的代碼

 1 public class Teacher 2     { 3         public enum Flag { Chinese, English }; 4         public string Name { get; set; } 5     } 6  7     public class ChineseTeacher : Teacher 8     { 9         Flag f = Flag.Chinese;10     }11 12     public class EnglishTeacher : Teacher13     {14         Flag f = Flag.English;15     }

  先來說下可變性,可變性分為協變性和逆變性。個人簡單地理解為協變性作用于返回類型時,返回的對象符合簽名中的返回類型,并進行向上轉換,如一個方法返回一個Teacher對象,這時我們可以返回一個EnglishTeacher對象,因為EnglishTeacher類是從Teacher類繼承的。或者簽名表明要返回一個接口,則可以返回一個實現該接口的類的實例。而對于逆變性,則作用于參數的轉遞,如果一個方法接受一個Teacher對象作為參數,那可以傳入一個ChineseTeacher對象。Teacher說我妥協了,你可以傳入一個實現或者繼承我的就行,不知理解是否正確,請指正。

  1. 說下泛型吧,泛型不支持協變,如下面的代碼將出錯

1 List<Teacher> list = new List<ChineseTeacher> {2                 new ChineseTeacher(),3                 new EnglishTeacher()4             };

  list對象指向的是一個List<Teacher>列表,而在實際new的時候指向的是List<ChineseTeacher>列表,List<ChineseTeacher>到List<Teacher>,不知道能不能理解為協變?請指正。向一個List<ChineseTeacher>加入一個ChineseTeacher實例肯定是沒錯的,那向List<Teacher>加入一個EnglishTeacher對象肯定也是沒錯的,但向List<ChineseTeacher>加入一個EnglishTeacher對象肯定是不對,所以從上述的多義性可以看出泛型不支持協變性。

  2.缺乏操作符約束或者"數值"約束

  如我們在一個泛型方法中希望對泛型類實例進行操作符的運算是不起作用,且有BUG,在編譯時則報錯,而后續可以使用動態類型跳過編譯階段,等到執行階段再作決策。

------------------------------------------------------------------------------------------------------------------------------------

  鑒于只說泛型可以文章篇幅過短,當然也知道文章在精不在多,說下沒有引用可空類型前,我們是如何表示一個"沒有值"的值。

  1.放棄一個值,用這個值表示"沒有值",多人開發時,就好像指定errorCode:1表示服務器出錯、errorCode:2表示用戶不正確操作。

  2.使用一個裝飾引用類型包含一個值,設置一個bool類型的標記

  3.與值屬性相對的加入個bool類型的標記,與2的不同在于,3的方法在于在同一個類中,而2則是將值和標記封裝成類,在使用值的類中加入封閉后類的實例。

  三種方式的缺點不言而喻,輸入過多的代碼,不能重復使用,基于這個C#引入了可空類型。

  請斧正。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 循化| 湘潭县| 上饶县| 白河县| 平远县| 弋阳县| 涟水县| 德阳市| 塘沽区| 永顺县| 腾冲县| 平定县| 寻乌县| 内江市| 化州市| 桃源县| 桃园市| 大邑县| 夏津县| 兰溪市| 淮南市| 太原市| 和静县| 聊城市| 龙里县| 辉县市| 三亚市| 马公市| 新昌县| 句容市| 沁阳市| 东平县| 石狮市| 洛隆县| 延长县| 茶陵县| 同心县| 陆丰市| 临澧县| 安陆市| 吉木乃县|