目錄
共變和反變(計算機科學)
編輯許多編程語言類型系統支持子類型化。差異是指更復雜的類型之間的子類型與它們的組成部分之間的子類型的關系。根據類型構造函數的不同,簡單類型的子類型關系可能會被保留、顛倒,或者被相應的復雜類型所忽略。這意味著簡單類型的子類型關系在復雜類型中得到了保留。這里,簡單類型的子類型關系對于復雜類型來說是相反的。換句話說,協變性是通過更具體而不同的質量(Cat對Animal是協變的),而禁變性是通過更一般而不同的質量(Animal對Cat是禁變的)。一個編程語言的設計者在為諸如數組、繼承和通用數據類型等語言特征設計類型規則時,會考慮差異性。通過使類型構造器具有協變性或禁變性而不是不變性,更多的程序將被接受為類型良好。另一方面,程序員經常會發現禁忌變量不直觀,而且準確地跟蹤變量以避免運行時的類型錯誤會導致復雜的類型化規則。
正式定義
編輯在編程語言的類型系統中,一個類型規則或一個類型構造函數是。如果它保留了類型的排序(≤),將類型從更具體的排序到更通用的排序:如果A≤B,那么I<A>≤I<B>;如果它顛倒了這個排序,則是不變量。如果A≤B,那么I<B>≤I<A>;如果這兩種情況都適用(即,如果A≤B,那么I<A>≡I<B>),則是雙變量;如果是協變、禁變或雙變量,則是變體;如果不是變體,則是不變體或非變體。文章考慮了這如何適用于一些常見的類型構造函數。
C#例子
編輯C#通用接口的變量是通過在其類型參數(零個或多個)上放置out(不變)或in(不變)屬性來聲明的。對于每個如此標記的類型參數,編譯器會最終驗證這種使用是全局一致的。
共變和反變(計算機科學)的數組
編輯只讀的數據類型(源)可以是共變的;只寫的數據類型(匯)可以是禁變的。同時作為源和匯的可變數據類型應該是不變的。為了說明這一普遍現象,考慮一下數組類型。對于動物類型,我們可以做一個類型Animal[],它是一個動物數組。
內容由匿名用戶提供,本內容不代表www.gelinmeiz.com立場,內容投訴舉報請聯系www.gelinmeiz.com客服。如若轉載,請注明出處:http://www.gelinmeiz.com/170701/