关于继承:C在子类中重新定义子方法,而不在父类中重新定义调用方法

C# redefine sub-method in child class without redefining calling method in parent class

我有一个包含许多方法的父类,这些方法都是由一个顶级方法调用的。

从概念上讲,父类如下:

1
2
3
4
5
6
7
8
9
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。


您需要使Method1Method2等虚拟化,并在子类中重写它们。例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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");
    }
}

现在调用每个类:

1
2
3
4
5
var parent = new ParentClass();
var child = new ChildClass();

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

会给你这个输出:

1
2
3
4
Top method in parent
Method1 in parent
Top method in parent
Method1 in child

来自docs:virtual关键字