我有三节课.
人 - >员工 - >经理
Person有一个声明为的虚方法
public virtual void saySomething()
Run Code Online (Sandbox Code Playgroud)
在我的员工里面
public virtual void saySomething()
Run Code Online (Sandbox Code Playgroud)
要么
public override void saySomething()
Run Code Online (Sandbox Code Playgroud)
我得到了同样的行为
经理里面我有
public override void saySomething()
Run Code Online (Sandbox Code Playgroud)
我对使用覆盖替换虚拟的事实感到困惑?我以为你使用override来表示这个类已经覆盖了一个基类函数.
如何阻止方法被覆盖?这是最后一种方法.
public virtual void saySomething()在子类中添加重新声明方法(方法隐藏;您可能会收到警告).
如果您访问它,它将表现相同:
Employee emp = ...
emp.saySomething();
Run Code Online (Sandbox Code Playgroud)
但现在添加:
Person per = emp;
per.saySomething();
Run Code Online (Sandbox Code Playgroud)
使用多态(via override),他们应该做同样的事情.但是通过方法隐藏他们不会.要明确隐藏方法,请使用new:
new public virtual void saySomething() {...}
Run Code Online (Sandbox Code Playgroud)
或者为了阻止某些事情被覆盖,请使用sealed:
public sealed override void saySomething() {...}
Run Code Online (Sandbox Code Playgroud)