gpt4 book ai didi

C# 继承虚拟或重写

转载 作者:行者123 更新时间:2023-11-30 13:34:00 25 4
gpt4 key购买 nike

我有三个类(class)。

人 -> 员工 -> 经理

Person 有一个虚方法声明为

public virtual void saySomething()

我有内部员工

public virtual void saySomething()

public override void saySomething()

我得到了同样的行为

我有经理的内部

public override void saySomething()

我对可以使用覆盖代替虚拟这一事实感到困惑?我认为您使用 override 来表示此类已覆盖基类函数之一的事实。

如何阻止方法被覆盖?这是最后一种方法。

最佳答案

在子类中添加 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() {...}

关于C# 继承虚拟或重写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4655440/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com