隐藏成员函数不起作用

本文关键字:不起作用 函数 成员 隐藏 | 更新日期: 2023-09-27 18:14:43

我想我错过了怀孕。我试图通过替换公共函数来覆盖子类中类的行为。在下面的程序中,我期望将"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#中必须显式声明。