2011-09-19 4 views
1

실수로 추상 메서드를 숨기는 것에 대한 질문이 있습니다.C# 추상 메서드 상속 및 은닉 메서드 실수로

저는 작업중인 게임에서 다른 모든 엔티티를 생성 할 인터페이스로 기본 Entity 클래스를 생성합니다.

이 Entity 클래스에서 파생 클래스를 여러 개 만들었습니다. MovingEntity, Trigger, Door 등과 같은 것들이 있습니다.이 아이들 클래스의 많은 것들은 또한 그들로부터 파생 된 아이들을 가지고 있습니다. 예를 들어, MovingEntity는 Projectile 및 EnemyUnit과 같은 클래스를 자식으로가집니다.

내 기본 Entity 클래스에는 모든 엔티티에서 이러한 메서드를 구현해야하기 때문에 Update() 및 Render()와 같은 메서드가 있습니다.

그러나 두 번째 레벨로 내려 가면 질문/문제가 발생합니다. 예를 들어 Trigger 클래스를 사용하겠습니다. 트리거는 기본 Entity 클래스에서 파생되지만 트리거에는 여전히 자체 트리거 (TriggerRespawning 및 TriggerLimitedLifetime 등)가 있습니다. Trigger 객체를 인스턴스화하고 싶지는 않습니다. 그래서이 클래스를 추상적으로 유지할 수 있습니다 - Trigger의 children 클래스에서 객체를 만 생성합니다. 그러나 Trigger가 Entity에서 구현해야하는 추상 메소드를 사용하면 어떻게됩니까?

저는 Entity에서와 같이 기본적으로 Trigger에서 동일한 코드를 사용할 수 있다고 생각했습니다. 동일한 메소드, 동일한 이름, 동일한 매개 변수를 선언하고 abstract로만 호출하십시오. 그런 다음 트리거의 자식은 실제 함수를 구현해야합니다.

그러나 이것은 Trigger 클래스에서 기본 Entity 클래스의 추상 메서드를 숨기고 있다고 말하기 때문에 작동하지 않았습니다.

중간의 부모가 모두이를 구현하지 않고 최종 자식에게 이러한 추상 메서드를 구현하도록 강요하는 아이디어를 어떻게 무시할 수 있습니까? 어린이 교실의 첫 번째 라운드에서 가상을 사용해야합니까?

나는 지금까지 좋은 대답을 찾을 수 없었기 때문에 분해하고 물어보기로했습니다. 미리 감사드립니다.

답변

10

그냥 전혀 방법을 재 선언하지 않습니다 - 최종 구체적인 클래스는 여전히 모든 방법까지 트리 구현되지 않은 모든 추상 메소드 구현해야합니다

public abstract class Foo 
{ 
    public abstract int M(); 
} 

public abstract class Bar : Foo 
{ 
    // Concrete methods can call M() in here 
} 

public class Baz : Bar 
{ 
    public override int M() { return 0; } 
} 
+0

오! 그럼 선상의 추상 클래스는 메서드를 언급 할 필요가 전혀 없습니까? 마지막으로 구체적인 수업이 있습니다. – Torr

+0

완벽한, 감사합니다. 제가 생각했던 것보다 훨씬 간단한 대답은 제가 직면해야 할 것입니다. – Torr

+0

@Torr 올바른, 추상 클래스 상속 된 추상 멤버를 구현하지 않아도됩니다. 구체적 (추상적이지 않은) 일 때만 구성원을 구현해야합니다. –