這是一個在C#中重寫的問題。在C#中重寫,使兩個後續的方法虛擬
當我使用下面的代碼:
class Program
{
class A
{
public virtual void callme()
{
Console.WriteLine("this is A");
}
}
class B : A
{
public new virtual void callme()
{
Console.WriteLine("this is B");
}
}
class C : B
{
public override void callme()
{
Console.WriteLine("this is C");
}
}
static void Main(string[] args)
{
A obj = new C();
obj.callme();
Console.ReadKey();
}
}
OUTPUT:This is A
當我使用:
class Program
{
class A
{
public virtual void callme()
{
Console.WriteLine("This is A.");
}
}
class B : A
{
public override void callme()
{
Console.WriteLine("This is B.");
}
}
class C : B
{
public override void callme()
{
Console.WriteLine("This is C.");
}
}
static void Main(string[] args)
{
A obj = new C();
obj.callme();
Console.ReadKey();
}
}
OUTPUT:This is C.
所以,如果我做的方法在隨後的類(A
以及B
),爲什麼它調用的最後一個方法,如果B
類重寫A
和C
是壓倒B
然後它調用C
的方法是虛擬的。
請解釋。
這正是您不應忽視編譯器警告的原因。 – leppie