#协变

.NET 泛型中的协变和逆变

协变(Covariance)使你能够使用比原始指定的类型派生程度更大的类型。你可以将IEnumerable<Derived>的实例分配给IEnumerable<Base>类型的变量。简单理解:把细的赋给粗的,适用于赋值。示例public class Base{}public&...

Student : IComparable<Student> 以及逆变和协变

IComparable<Student>是Student的父类,所以IComparable<Student>可以接收Student。但是在使用CompareTo方法的时候,必须传入Student,不允许传入父类IComparable<Student>。publicinterfaceI...

C# 4.0开始,泛型接口和泛型委托都支持协变和逆变

 从C#4.0开始,泛型接口和泛型委托都支持协变和逆变,由于历史原因,数组也支持协变。里氏替换原则:任何基类可以出现的地方,子类一定可以出现。协变(out)协变:即自然的变化,遵循里氏替换原则,表现在代码上则是任何基类都可以被其子类赋值,如Animal=Dog、Animal=Cat使用out关键字声明(注意和...

【转】编写高质量代码改善C#程序的157个建议——建议44:理解委托中的协变

 建议44:理解委托中的协变委托中的泛型变量天然是部分支持协变的。为什么是“部分支持协变”?看下面示例:classProgram{publicdelegateTGetEmployeeHanlder<T>(stringname);staticvoidMain(){GetEmp...

【转】编写高质量代码改善C#程序的157个建议——建议43:让接口中的泛型参数支持协变

 建议43:让接口中的泛型参数支持协变除了上一建议中提到的使用泛型参数兼容接口不可变性外,还有一种办法是为接口中的泛型声明加上out关键字来支持协变,如下所示:interfaceISalary<outT>//使用out关键字{voidPay();}staticvoidMain(string[]ar...