C# | 泛型委托的协变与逆变

当类型参数仅用作输出(即返回值)时,可将类型参数标记为 out
这样就允许
1 | Del<Dog> dogMaker = MakeDog; // MakeDog是一个返回Dog匹配委托的方法 |
当类型参数仅用作输入(作为方法的参数类型),可将类型参数标记为in
这样就允许
1 | Del<Animal> animal =ActOnAnimal; // ActOnAnimal为匹配此委托的方法 |
导致用 Del<Dog> 时传入的是 Dog ,于是又传入了其指向了 Del<Animal> ,
于是传入 Del<Animal> 了一个Animal的派生类Dog
这种在期望传入基类 <Animal> 时允许传入派生对象 <Dog> 的特性叫做逆变 Q&A 补充 参考 感谢帮助!