c# - 新的关键字和方法隐藏

标签 c# inheritance

new 关键字用于隐藏相同的基类实现。但是我不确定为什么下面的代码会产生 Baseclass 的输出

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(); 
    } 
} 

我们在 derived2 中隐藏了 fun 的实现,但仍然调用了基类,为什么这样呢?我错过了什么吗?

最佳答案

Derived2.fun是私有(private)的(它是类型成员的默认访问修饰符)。它在类之外是不可见的。只有在类外部可见的 fun 方法是 Baseclass.fun 才会被调用。

您需要使您的 Derived2.fun 在类外可见,以获得预期的输出。您可以通过将其公开/内部化来实现。

关于c# - 新的关键字和方法隐藏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30208180/

相关文章:

c# - asp.net文本框自动填充

C++ 在作为函数传递后从父级转换为子级?

c# - 从类或抽象类继承

Java继承问题: What's the difference and why ? 这给程序员带来了什么优势和灵活性?

java - 当我们实例化一个对象时,是否会创建父类(super class)的实例?

c# - WPF + Caliburn 微 : how to catch Window Close event?

c# - 我应该如何确定 MSAL 帐户是否具有基于 Exchange 的电子邮件系统? (有一个异常(exception))

c# - 如何在 LINQ 中对单个连接中的多个字段进行左连接

c# - 如何在数组中从 ViewBag 传递的 ASP.NET MVC View 中显示特定范围的项目

c# - 获取通用抽象类的所有继承类