c# - 隐藏成员函数不起作用

标签 c# inheritance

我想我是误会了。我试图通过替换公共(public)函数来覆盖子类中类的行为。在下面的程序中,我希望将“B”写入控制台,但程序打印出“A”。我哪里觉得不对?我怎样才能实现它。 (在我的实际情况下,我无法更改 A 类)。

    class Program
    {
        class A { public void F() { Console.WriteLine("A"); } }
        class B : A { public new void F() { Console.WriteLine("B"); } }

        static void Main(string[] args)
        {
            A x;
            x = new B();
            x.F();
            Console.ReadLine();
        }
    }

最佳答案

可以通过使用virtual 方法并在下面覆盖它来获得所需的行为;请注意 override 关键字。

class Program
{
    class A { public virtual void F() { Console.WriteLine("A"); } }
    class B : A { public override void F() { Console.WriteLine("B"); } }

    static void Main(string[] args)
    {
        A x;
        x = new B();
        x.F();
        Console.ReadLine();
    }
}

如果您碰巧有 Java 背景,请注意这种类型的继承在 Java 中是默认行为,但在 C# 中必须显式声明。

关于c# - 隐藏成员函数不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32800436/

相关文章:

c# - 合并两个字典的键

C# 设计 : Why is new/override required on abstract methods but not on virtual methods?

c# - 在所有表单中使用 DataTable 中的数据

c# - SQL 表上的 XML 读取器返回无效 XML

c++ - 动态转换为派生类 : a strange case

c# - FFI 的 size_t 兼容类型

javascript - react 图标点击事件

Java继承与递归

java - 您如何确保继承的静态字段始终从子类而不是基类获取其值?

java - Java中的默认构造函数和继承