2010年10月11日 星期一

.Net Framework 4.0 泛型中的共變數和反變數


Covariant(共變數)
IEnumerable<Derived> d = new List<Derived>();
IEnumerable<Base> b = d;

Contravariant(反變數)
Action<Base> b = (target) => { Console.WriteLine(target.GetType().Name); };
Action<Derived> d = b;
d(new Derived());

一般來說,Covariant 型別參數可以用來做為委派的傳回型別,而 Contravariant 型別參數可以用來做為參數型別。例如,Covariant 型別參數可以用來做為介面方法的傳回型別,而 Contravariant 型別參數可以用來做為介面方法的參數型別。

沒有留言:

張貼留言