我有三节课。
人 - >员工 - >管理器
Person有一个声明为
的虚方法public virtual void saySomething()
员工内部我
public virtual void saySomething()
OR
public override void saySomething()
我得到了同样的行为
经理内部我
public override void saySomething()
我对使用覆盖替换虚拟的事实感到困惑?我以为你使用override来表示这个类已经覆盖了一个基类函数。
如何阻止方法被覆盖?这是最后一种方法。
答案 0 :(得分:8)
在子类中添加public virtual void saySomething()
是重新声明方法(方法隐藏;您可能会收到警告)。
如果您以下列方式访问它,它的行为将相同:
Employee emp = ...
emp.saySomething();
但现在添加:
Person per = emp;
per.saySomething();
使用多态(通过override
),他们应该做同样的事情。但是通过方法隐藏他们不会。要显式隐藏方法,请使用new
:
new public virtual void saySomething() {...}
或停止进一步覆盖某些内容,请使用sealed
:
public sealed override void saySomething() {...}
答案 1 :(得分:2)
您可以使用sealed
关键字来阻止继承层次结构中的虚拟被覆盖。
您在Employee
中使用覆盖是正确的,您希望覆盖 Person
提供的默认实施。 <{1}}方法的virtual
类型中的Employee
不正确。
答案 2 :(得分:1)
您必须使用sealed关键字。