[英]Overriding in C#, making two subsequent method virtual
這是一個覆蓋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();
}
}
輸出: 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();
}
}
輸出: This is C.
因此,如果我在后續類( A
和B
)中創建一個虛擬方法,為什么它調用最后一個方法,如果B
類重寫A
和C
重寫B
那么它調用C
的方法。
請解釋。
檢查編譯器警告:
警告1'..Program.B.callme()'隱藏繼承的成員'..Program.A.callme()'。 要使當前成員覆蓋該實現,請添加override關鍵字。 否則添加新關鍵字。 .. \\ Program.cs 44 33測試
它聲明B中的方法隱藏了A中的方法。當你在C中覆蓋方法時; 它只是覆蓋B中的方法而不是A中的方法(編譯器假定你在類B中的callme
是一個新方法)。 因此,當您調用A.callme
,由於A中的方法未被覆蓋,因此返回“this is A”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.