C#:可以通过继承隐藏实现吗



假设我有以下代码:

interface IBase {
    void DoStuff(double x, double y);
}
class Base : IBase {
    public void DoStuff(double x, double y) { Console.WriteLine(x + y); }
}

在不实际使用override关键字的情况下覆盖/隐藏基类的行为是否是一种好的做法?下面的代码中有隐藏的陷阱吗?

class Derived : Base {
    public void DoStuff(double x, double y) { Console.WriteLine(x * y); }
}

在这里使用new关键字更好吗?像这样:

class Derived : Base {
    public new void DoStuff(double x, double y) { Console.WriteLine(x * y); }
}

重写/隐藏基类的行为而不实际使用override关键字是否是一种好的做法?

您不能"覆盖"基方法,因为它不是virtual。你所能做的就是隐藏它。这很少是一种"好的做法",但没有什么可以阻止它,所以它是否"好"是高度相关的。

在这里使用新关键字有什么更好的吗?

使用new丝毫不会改变功能。关键字在那里,这样你就可以显式地告诉编译器"我知道我隐藏了一个基成员"。无论是否使用new,行为都是相同的。

最新更新