2017-01-23 3 views
2

У меня есть абстрактный класс A и он имеет виртуальный метод с частичной реализацией и наследуется в классе B. Я хочу реализовать виртуальный метод в производном классе, как мне получить базовую реализацию в производном классе. Пример.Как реализовать виртуальный метод базового класса, а также получить реализацию базового метода в методе переопределения в C#

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 
    } 
} 
+1

@Derlin Я не думаю, что было бы справедливо использовать ++ нити C для дублированной связи (как основные эта тема может показаться). –

+0

Упс, извините, я неправильно понял. Я думал, что это C++, а не C#. – Derlin

+0

Я все еще уверен, что этот вопрос задан раньше, также в контексте C# – Sentry

ответ

6

Переопределение виртуальный метод делает только что, переопределяет (базовый) реализацию по умолчанию и заменяет его новым. Однако, если вы не предоставляете переопределенную реализацию для виртуального метода, вы автоматически получаете базовую реализацию. Таким образом, ответ на ваш вопрос просто не переопределить метод add в первую очередь:

class B : A {} 

Однако, если вам нужно сохранить базовую реализацию, но хотите расширить его, вы можете явно вызвать базовая реализация из производного класса с ключевым словом base. Например:

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

Это правильный ответ! – MrVoid

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); 
    } 
} 
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); 
    } 
} 
Смежные вопросы