:Contravariance - 아래 작은 코드 예제 - 나는 공분산 및 contravariance에 대해 최근에 읽은 C#
public class BaseClass{
public int x = 1;
public static void print(BaseClass objClass)
{
Console.WriteLine(objClass.GetType().Name + " " + objClass.x);
}
}
public class DerivedClass : BaseClass{
public int x = 2;
}
public class Program
{
public static void Main(string[] args)
{
BaseClass bC = new BaseClass();
DerivedClass dC = new DerivedClass();
BaseClass.print(bC); //DerivedClass 1
DerivedClass.print(bC); //DerivedClass 1
BaseClass.print(dC); //DerivedClass 1
DerivedClass.print(dC); //DerivedClass 1
}
}
내 질문은 - 무슨 실제로 우리에게 contravariance? BaseClass 메서드 (매개 변수는 BaseClass 타입 임)에 인수로 DerivedClass의 개체를 전달할 수 있지만 이러한 작업의 이점은 무엇입니까? 그리고 왜 DerivedClass 객체를 전달할 때 BaseClass에 x 값을 반환합니까?
아마도 이것은 반공 변이의 설명 혜택에 대한 나쁜 예일 수 있습니다. 그러면 다른 예를 들어 주시면 고맙겠습니다.
이것은 어디에서나 반공을 사용하지 않습니다. – Lee
와우 - 그래서 인터넷에서 오해의 소지가있는 튜토리얼이 있습니다.)하지만 어쨌든 - 왜 누군가가 DerivedClass 객체를 전달하면 나에게 BaseClass의 x 값을 반환하는지 설명 할 수 있습니까? 변화가 없다면 왜 그렇게 할 수 있습니까? PS. Sinatr - 그 링크 덕분에 – Hadrian
상속/다형성과의 혼란을 혼란스럽게합니다. –