많은 contravariance에 대해 배우기 위해 많은 블로그를 검토하고 있지만 더 많은 것을 배울수록 더 혼란스러워집니다. 나는 위의 라인이인터페이스에서 contravariance를 구현하는 #
ICovariant<derivedClass> derivedClass = new sample<baseClass>();
같은 contravariance을 구현
interface ICovariant<in T>
{
void add(T _object);
}
public class sample<T> : ICovariant<T>
{
List<T> lists = new List<T>();
public void add(T _object)
{
lists.Add(_object);
}
}
public class baseClass
{
public string name { get; set; }
public void print()
{
Console.WriteLine("one method");
}
}
public class derivedClass : baseClass
{
public string address { get; set; }
public void print()
{
Console.WriteLine("one more method");
}
}
을 다음과 같은
내 질문에, 난 인터페이스 및 구현이 있다고 가정하고, 내가 가장 파생를 정의 할 수 있어요 클래스에서 가장 파생 된 클래스에 있지만 내가이 일을 할 때 오류가 발생했습니다
derivedClass.add(new baseClass());
오류가 발생하는 이유는 무엇입니까?
- 나는 인터페이스에서 정의 할 때 반항 문자로 언급했습니다.
- 최소 상속 된 형식으로 샘플 클래스를 초기화 할 수있는 경우 add 메서드를 호출하는 동안 동일한 작업을 수행 할 수없는 이유는 무엇입니까? 내가 왜 add 메소드를 호출하는 동안 동일한 작업을 수행 할 수없는 나는 그 이상 상속 유형 샘플 클래스를 초기화 할 수 있어요 때
내가 뭔가
'ICovariant'는 공변이지 않습니다. 공변 (covariant)'ICovariant'가 아닌 인터페이스의 이름을 지정하는 것은 꽤 의미가 있습니다. – Servy