隐藏成员函数不起作用

时间:2015-09-26 18:16:40

标签: c# inheritance

我想我错过了概念。我尝试通过替换公共函数来覆盖子类中的类的行为。在下面的程序中,我希望将“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();
        }
    }

1 个答案:

答案 0 :(得分:3)

可以使用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#中必须显式声明。