2017-05-10 2 views
0

저는 C#과 OOP에 상당히 익숙하며, 상속에 관한 질문이 있습니다. 하나의 오버로드 된 메소드 상속

내가 가진 말 :

public abstract class Command 
{ 
    protected Command() 
    { 
    } 

    public abstract string Execute(); 

    public abstract string Execute(object o); 
} 

public class CommandA : Command 
{ 
    public override string Execute() 
    { 
    } 
} 

public class CommandB : Command 
{ 
    public override string Execute(object o) 
    { 
    } 
} 

CommandAExecute()을 구현하지 Execute(object o)CommandB을 구현하지에 의한 명백한 오류가 있습니다.

제 질문은 이러한 오류를 피하기 위해 구현해야하는 코드가 있는지 여부입니다. 빈 메소드가 허용됩니까?

+0

기본 클래스 (다른 클래스에서 상속받은 클래스)는 다른 클래스가 공유하는 메서드 만 정의해야합니다. – EpicKip

+0

아마도'public abstract string Execute (object o = null);'? –

+0

아니요. 추상 클래스의 추상 메소드를 대체해야합니다. 기본 클래스를 추상으로 사용하지 않도록하십시오. – Manoj

답변

2

하위 클래스가 실제로 일부 메소드를 구현하지 않을 것으로 예상되는 경우 abstract을 악용합니다. abstract은 기본 클래스 이 기능을 구현해야한다는 것을 확인하는 데 사용됩니다. 누군가 new CommandB().Execute()에 전화하면 어떻게 되나요? . (제 생각 코드 냄새에 불구하고) 할 경우에

, 디자인이 올바르지 않을 수 있습니다 당신은 당신이하고있는 상황에서 결국 이러한 경우에, 그 다소 일반적인 다음

public class CommandA : Command 
{ 
    public override string Execute() 
    { 
    } 

    public override string Execute(object o) 
    { 
     throw new NotImplementedException(); 
    } 
} 

다소 청소기 방법 :

public abstract class Command 
{ 
    protected Command() 
    { 
    } 

    public abstract string Execute(object o = null); 
} 

여전히 사람이 CommandA에 개체를 전달할 수 있다는 사실을 처리해야 할거야하지만.

명령의 동작이 서로 다른 경우 동일한 추상 클래스를 서브 클래 싱하지 않아야합니다.

+0

감사합니다 - 적절한 코딩 연습을 위해 상속을 리디렉션하도록 코드를 변경했습니다. –

관련 문제