나는 이러한 클래스를 생성 : 파생 클래스 가상 메서드를 호출하는 방법?
public abstract class Node
{
public virtual NodeModel CreateModel()
{
throw new NotImplementedException();
}
}
public class Folder : Node
{
public virtual FolderModel CreateModel()
{
// Implementation
}
}
public class Item : Node
{
public virtual ItemModel CreateModel()
{
// Implementation
}
}
그런 다음 내 프로그램에 난 단지 항목 및 폴더 객체를 포함하는 노드의 목록이있다. 목록에서 반복하고 CreateModel() 메서드를 호출하려고하면 항상 Node 클래스 메서드가 호출되므로 예외가 throw됩니다.
파생 된 유형에 따라 반환 유형이 다르므로 CreateModel()을 abstract로 변경할 수 없습니다. 다른 반환 유형을 사용할 수 있는지 궁금합니다. 나는 또한 generics를 피하고 싶다. 사실 Intellisense는 그 인스턴스를 가지고 놀 때 상위 클래스 방법을 보여줍니다. 상위 클래스에서 가상 구현을 제거하면 기본 클래스 구현이 표시됩니다. 이것이 실제로 가능하다고 생각한 곳입니다.
그렇다면 프로그램이 상위 클래스 메소드를 호출하도록하려면 어떻게해야합니까?
편집 :는 대답은 실제로 간단하고 바로 내 코앞이었다. 반환 형식은 기본 클래스 추상 CreateModel()에 정의 된 반환 형식에서 상속되므로 중요하지 않습니다. 방금 기본 클래스에서 메서드를 추상으로 표시 했으므로 잘 작동합니다. 나는 왜 나에게 꽤 명백한 것 같기 때문에 내가 왜 어떤 순간에 혼란스러워하는지 모르겠다.
나를 도와 주신 모든 분들께 감사드립니다.
에 CreateModel를 오버라이드 (override) 할 필요가 이렇게하려면 (예. 노드) 또는 서브 클래스 중 하나/파생 클래스 (항목 또는 폴더). 질문이 조금 불투명하기 때문에 업데이트하십시오. –
이 실수를 지적 해 주셔서 감사합니다. – Ucodia
C#은 반환 유형에 따라 메서드 확인을 수행 할 수 없으므로 Jon Skeet이 제안한 제네릭을 사용하지 않는 한 객체를 반환해야합니다. public virtual object CreateModel() –