C # переопределить вложенный метод в дочернем классе без переопределения вызывающего метода в родительском классе - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть родительский класс со многими методами, которые все вызываются одним методом верхнего уровня.

Концептуально родительский класс выглядит так:

class ParentClass
{
    void TopMethod(){ Lots of code and calls Methods1-N defined below}

    void Method1(){}
    void Method2(){}
    ...
    void MethodN(){}
}

У меня естьмногие другие классы, которые я хочу, чтобы быть незначительными вариациями этого базового класса.Поэтому я объявляю их наследующими от ParentClass.Скажем, все, что мне нужно сделать, это изменить определение Method1 в дочерних классах.Но как мне сказать дочернему классу использовать все остальное из ParentClass, только с новым определением для Method1.В частности, я не хочу, чтобы дублирующий код переопределял TopMethod в дочернем классе, просто чтобы я мог заставить его использовать переопределенный Method1 в дочернем классе вместо Method1 в ParentClass.

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019

Вам нужно сделать виртуальные Method1, Method2 и т. Д. И переопределить их в дочернем классе.Например:

public class ParentClass
{
    public void TopMethod()
    {
        Console.WriteLine("Top method in parent");
        Method1();
    }

    public virtual void Method1()
    {
        Console.WriteLine("Method1 in parent");
    }
}

public class ChildClass : ParentClass
{
    public override void Method1()
    {
        Console.WriteLine("Method1 in child");
    }
}

Теперь вызов каждого класса:

var parent = new ParentClass();
var child = new ChildClass();

parent.TopMethod();
child.TopMethod();

Даст вам такой вывод:

Top method in parent
Method1 in parent
Top method in parent
Method1 in child
0 голосов
/ 28 февраля 2019
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...