C#在子类中重新定义子方法,而不在父类中重新定义调用方法

时间:2019-02-28 15:47:01

标签: c# inheritance

我有一个父类,其中有许多方法,所有方法都由一个顶级方法调用。

从概念上讲,父类如下:

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而不是ParentClass中的Method1。

2 个答案:

答案 0 :(得分:1)

从文档中:virtual keyword

答案 1 :(得分:1)

您需要将Method1Method2等虚拟化,并在子类中覆盖它们。例如:

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