我只有一个基本问题:
下面的代码中的仅返回派生类方法,但我不知道为什么。请帮助找出问题所在。
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
A value = new B();
value.method();
Console.Read();
}
}
class A
{
public void method()
{
Console.WriteLine("A");
}
}
class B : A
{
public void method()
{
Console.WriteLine("B");
}
}
答案 0 :(得分:1)
如果您未明确添加任何修饰符(例如virtual
或override
),则将new
隐式添加到代码中,从而产生以下内容:
class B : A
{
public new void method()
{
Console.WriteLine("B");
}
}
这隐藏基本实现,但仅(如果您的引用的类型为B
)。在您的情况下,您有一个基类型为A
的引用,该引用对new
成员没有任何了解,因此将始终对基类成员进行调用
我不知道您为什么这里没有virtual
和override
。如果确实无法添加它们,则需要派生类型的引用:
B value = new B();
value.method();