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