gpt4 book ai didi

c# - 关于继承

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

为什么这段代码会产生输出“Base class”而不是“Derived2 class”?

namespace TestConsoleApplication
{
class Baseclass
{
public void fun()
{
Console.Write("Base class" + " ");
}
}
class Derived1: Baseclass
{
new void fun()
{
Console.Write("Derived1 class" + " ");
}
}
class Derived2: Derived1
{
new void fun()
{
Console.Write("Derived2 class" + " ");
}
}
class Program
{
public static void Main(string[ ] args)
{
Derived2 d = new Derived2();
d.fun();
}
}
}

最佳答案

因为您没有将该方法声明为公共(public)的。

您已经告诉它隐藏原始定义,而不是覆盖它 - 它会做,但默认访问修饰符是private,不是公开的

例如,当从 Derived2 中调用方法时:

class Derived2 : Derived1
{
new void fun()
{
Console.Write("Derived2 class" + " ");
}

public void Test()
{
fun();
}
}
class Program
{
public static void Main(string[] args)
{
Derived2 d = new Derived2();
d.Test(); //Prints 'Derived2 class'
}
}

将其设置为 public 确实会在您的原始示例中打印 Derived2

public new void fun()
{
Console.Write("Derived2 class" + " ");
}

关于c# - 关于继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37606471/

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