0
我已經開始掌握反轉現象了,儘管我試圖弄清楚什麼時候可以使用接口的好處。顯然我錯過了一些東西。無法用接口實現逆變?
這裏是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"));
這些未必是最好的例子,但我仍然不能似乎'得到它'。 在 keywork上定義的動作委託只需簡短的語法方式就像lambda是委託的?
+1,更不用說有些事情(如Delegates和Enums)不能實現接口。 – Josh 2010-04-23 02:18:43