인터페이스가 대신 사용될 수있는 이점을 알아 내려하고 있지만, 나는 contravariance를 파악하기 시작했습니다. 분명히 나는 뭔가를 놓치고있다. 여기 인터페이스로 반공소를 구현할 수 없습니까?
는 C# 4 예를 들어 C#을에 이전 버전에서 작동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"));
같은 예이다
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"));
이 가장 좋은 예되지 않을 수도 있습니다,하지만 난 여전히 수없는 것 '해'. 의은 작업 위임에 정의 된 핵심 작업입니다. 간단히 말해서 람다는 위임자와 같은 구문 방식입니까?
+1, Delegates 및 Enum과 같은 일부 기능은 인터페이스를 구현할 수 없습니다. – Josh