我想我是误会了。我试图通过替换公共(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/