3

나는 추상적 인 클래스 A를 가지고 있고 그것은 가상 메소드가 부분적으로 구현되어 있고 클래스 B에서 상속된다. 파생 클래스에서 가상 메소드를 구현하고 싶다. 어떻게 파생 클래스에서 기본 구현을 얻어야 할까? 예를 들어.

public abstract class A
{
    public int Sum { set; get; }
    public virtual void add(int a, int b)
    {
        Sum = a + b;
    }
}
class B : A
{
    public override void add(int a, int b)
    {
        // what should i write here
    }
}


  • @Derlin 나는 중복 링크 (이 토픽이 얼마나 기본적인 것처럼 보일지)를 위해 C ++ 스레드를 사용하는 것이 공평하다고 생각하지 않는다. - Jeppe Stig Nielsen
  • 죄송합니다, 잘못 읽었습니다. C #이 아니라 C ++이라고 생각했습니다. - Derlin
  • 이 질문은 이전에 C #의 맥락에서 묻기도 전에 확신합니다. - Sentry

3 답변


7

가상 메소드를 오버라이드 (override)하면 (자), 디폴트의 (기본) 구현을 오버라이드 (override) 해, 새로운 것으로 대체합니다. 그러나 가상 메서드에 대한 재정의 된 구현을 제공하지 않으면 자동으로 기본 구현을 가져옵니다. 따라서 귀하의 질문에 대한 답변은 간단합니다.그 (것)들을 무시하지 말라.add처음부터:

class B : A {}

그러나 기본 구현을 유지해야하지만 확장하려는 경우 기본 구현을 명시 적으로 파생 클래스에서 호출 할 수 있습니다.base예어. 예 :

class B : A
{
    public override void add(int a, int b)
    {
        base.add(a, b);
        DoSomethingElse();
    }
}


  • 이것은 정답입니다! - MrVoid

3

public abstract class A
{
    public int Sum { set; get; }
    public virtual void add(int a, int b)
    {
        Sum = a + b;
    }
}

class B : A
{
    public override void add(int a, int b)
    {
        //do your sufff

        //call base method of class A
        base.add(a, b);
    }
}


3

간단히 기본 클래스 함수를 호출하십시오.

class B : A
{
    public override void add(int a, int b)
    {
        // do operation related to derived class 
        // call your base function
        base.add(a, b);
    }
}

연결된 질문


관련된 질문

최근 질문