我正处于开始掌握逆变的地步,尽管我正在尝试找出可以使用接口代替的优势是什么。显然我错过了一些东西。
这是 c#4 示例
class Dog : Animal {
public Dog(string name) : base(name) { }
}
class Animal {
string _name;
public Animal(string name) {
_name = name;
}
public void Walk() {
Console.WriteLine(_name + " is walking");
}
}
Action<Animal> MakeItMove = (ani) => { ani.Walk(); };
Action<Dog> MakeItWalk = MakeItMove;
MakeItWalk(new Dog("Sandy"));
在 c# 的早期版本中工作的相同示例
class Dog : Animal {
public Dog(string name) : base(name) { }
}
class Animal : IAnimal {
string _name;
public Animal(string name) {
_name = name;
}
public void Walk() {
Console.WriteLine(_name + " is walking");
}
}
interface IAnimal {
void Walk();
}
Action<IAnimal> MakeItMove = (ani) => { ani.Walk(); };
Action<IAnimal> MakeItWalk = MakeItMove;
MakeItWalk(new Dog("Sandy"));
这些可能不是最好的例子,但我似乎仍然无法“明白”。在动作委托上定义的 in 键是否只是一种简写的语法方式,比如 lambda 是委托的?