기본 클래스의 생성자를 재정의하는 데 어려움을 겪고있는 준 복합 상속 구조가 있습니다. 다음 코드는 오류를 표시 할 수 있습니다.상속 된 클래스에 문제가 발생했습니다. generics가있는 생성자
public abstract class MyBaseObject
{
public MyBaseObject(MyBaseCollection<MyBaseObject> parent)
{
this.Parent = parent;
}
public MyBaseCollection<MyBaseObject> Parent { get; set; }
}
public abstract class MyBaseCollection<T>
where T : MyBaseObject
{ }
public class MyRealObject : MyBaseObject
{
public MyRealObject(MyRealCollection parent)
: base(parent)
{ }
public new MyRealCollection Parent { get { return (MyRealCollection)base.Parent; } }
}
public class MyRealCollection : MyBaseCollection<MyRealObject>
{ }
따라서 MyBaseObject 클래스의 생성자를 재정의 할 수 없습니다. MyBaseCollection 대신 MyRealCollection을 전달하려는 것은 허용되지 않습니다. 제네릭 인수를 제거하면 작동합니다. MyRealCollection은 MyBaseCollection 대신 허용됩니다. 하지만 제 컬렉션 클래스가 필요한 방식으로 작동하도록하려면 제네릭 인수가 필요합니다.
C# 4를 사용하는 경우이 질문과 대답을보고 싶을 수 있습니다. 문제에 대한 직접적인 대답이 아닐 수도 있지만 코드를 약간 리팩터링하려는 경우 도움이 될 수 있습니다. http://stackoverflow.com/q/9203352/250725 – psubsee2003