gpt4 book ai didi

c# - 当我可以在派生类中隐藏它时,为什么我需要声明一个虚拟方法

转载 作者:太空宇宙 更新时间:2023-11-03 20:29:54 24 4
gpt4 key购买 nike

class clsTestParent
{
public void testNoAbstract()
{
Console.WriteLine("Parent Method Call");
}
}

class clsDerivedTest : clsTestParent
{
public void testNoAbstract()
{
Console.WriteLine("Child Method Hiding Parent Method");
}
}

clsTestParent objParent = new clsTestParent();
clsTestParent objOfParentFromDerived = new clsDerivedTest();
clsDerivedTest objDerived = new clsDerivedTest();

objParent.testNoAbstract();
objOfParentFromDerived.testNoAbstract();
objDerived.testNoAbstract();

Output:
Parent Method Call
Parent Method Call
Child Method Hiding Parent Method

但是当我将 testNoAbstract() 声明为虚拟并在派生类中覆盖时,输出将如下所示:

Parent Method Call  
Child Method Hiding Parent Method
Child Method Hiding Parent Method

以前我认为,我们只能在派生类中重新定义一个方法,如果它被定义为abstractvirtual,但现在可以看到,我们可以通过在派生类中重新定义它来隐藏父类方法。

虽然,我可以通过更改代码看到输出的差异,但我想知道,上述两种方法之间的差异是什么,以及为什么会产生不同的输出。

最佳答案

如果您将永远执行clsTestParent a = new clsDerivedTest () - 您将永远无法执行clsDerivedTest 类中的那个!!!!

这就是区别,这就是编译器警告您的原因。

如果你想预先形成一个多态架构,你实际上会这样做。

Microsoft 告诉您:“听着,您创建了一个类,我们将为您提供所有公共(public)内容等,但我们不知道您希望如何实现这些方法……如果您”将使用 virtual + override - 你将能够通过 instace 类型执行不同的方法。如果你不重写 - 所以父亲的功能将始终执行......这是你的选择......我们警告你“......他们确实警告

关于c# - 当我可以在派生类中隐藏它时,为什么我需要声明一个虚拟方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8051897/

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