1. 程式人生 > >進入快速通道的委托(深入理解c#)

進入快速通道的委托(深入理解c#)

bject 協變性 隱式 out 使用方法 int 在一起 ble 值類型

1.方法組:所有的名稱相同的重載方法合在一起就成為一個方法組。

2.協變性和逆變性:

協變性指的是——泛型類型參數可以從一個派生類隱式轉化為基類。

逆變性指的是——泛型類型參數可以從一個基類隱式轉化為派生類 。

註意事項:

1. 只有接口和委托支持協變和逆變(如 Fun<out TResult>,Action<in T>),類型或泛型方法的類型參數都不支持協變和逆變。

2.協變和逆變只適用於引用類型,值類型不支持協變和逆變(因為可變性存在一個引用轉換,而值類型變量存儲的就是變量本身,而不是對象的引用),所以List<int> 無法轉化為Ienumerable<object>。

3.必須顯示用in或out來標記類型參數。

4.委托的可變性不要在多播委托中使用。

假設一個派生類重載了某個基類中聲明的方法,我們打算使用方法組轉換創建一個委托的實例。由於c#2中的協變性和逆變性,一個以前只和基類方法匹配的轉換,現在也和派生類方法相匹配。在這種情況下,編譯器將選擇派生類方法。

進入快速通道的委托(深入理解c#)