长期以来,我一直试图理解在C#泛型中使用"in"和"out"参数的用途,但我就是无法理解(我知道这个问题在StackOverflow上经常被问到)。我通常理解什么是协变性和逆变性,只是不明白为什么需要使用"in"和"out"参数。
以下是示例:
public class MainClass {
delegate TOut MyDelegate<TIn, TOut>(TIn input);
public static void Main()
{
// Func Delegate is using "in T, out TResult"
Func<Dog, Mammal> funcDelegate = TestMethod;
// not using "in" or "out" parameters
MyDelegate<Dog, Mammal> myDelegate = TestMethod;
}
static Dog TestMethod(Mammal m) { return new Dog(); }
class Mammal { }
class Dog : Mammal { } }//end of class
为什么 Func 委托在我的委托没有“in”和“out”的情况下也可以引用协变和逆变的方法时,还要使用“in”和“out”?