建議43 讓介面中的泛型引數支援協變

2021-07-22 11:38:26 字數 720 閱讀 2235

建議43:讓介面中的泛型引數支援協變

除了上一建議中提到的使用泛型引數相容介面不可變性外,還有一種辦法是為介面中的泛型宣告加上out關鍵字來支援協變,如下所示:

inte***ce isalary    //

使用out關鍵字

static

void main(string

args)

static

void printsalary(isalarys) //

用法正確

這段**在fcl4.0以前是不能編譯通過的,因為ienumerable這個介面在fcl中沒有被宣告為ienumerable:

static

void

main()

static

void printpersonname(ienumerablepersons)

}

fcl4.0對很多介面進行了修改以支援協變,如ienumerable、ienumerator、iquerable等。由於ienumerable現在支援協變,所以上段**在fcl4.0中能執行得很好。

在我們自己的**中,如果要編寫泛型介面,除非確定該介面中的泛型引數不涉及變體,否則都建議加上out關鍵字。協變增大了介面的使用範圍,而且幾乎沒有帶來什麼***。

**:《編寫高質量**改善c#程式的157個建議》陸敏技

Dart 中泛型 泛型方法 泛型類 泛型介面

泛型就是解決類 介面 方法的復用性以及對不特定資料的支援 void main 定義乙個泛型方法 t printdata t value running dart users zhoujian dartdemo demo.dart 2zhoujian done exited with code 0 i...

建議42 使用泛型引數相容泛型介面的不可變性

建議42 使用泛型引數相容泛型介面的不可變性 讓返回值型別返回比宣告的型別派生程度更大的型別,就是 協變 如 public employee getaemployee string name programmer是employee的子類 programmer是employee的子類,所以progra...

泛型 泛型在介面上的使用

package cn.itcast.genrictiry 泛型介面 泛型介面的定義格式 inte ce 介面名 宣告自定義泛型 泛型介面要注意的事項 1.介面上自定義的泛型的具體資料型別是在實現乙個介面的時候指定 的。2.在介面上自定義的泛型如果在實現介面的時候沒有指定具體的資料類 型,那麼預設為o...