![](/img/trans.png)
[英]Why can't we use access modifiers and static keyword for creating an object in C#?
[英]Why is can't use overriding method in C#? (not about keyword)
public abstract class A
{
public void CallMe() { Console.WriteLine("I am A."); }
}
public class B : A
{
new public void CallMe() { Console.WriteLine("I am B."); }
}
class Program
{
static void Main(string[] args)
{
A a = new B();
a.CallMe();
}
}
輸出為“我是A”。
為什么會這樣呢? 這合理嗎?
由Visual Studio 2012編譯。
您需要將基類中的CallMe()
方法設為virtual
,然后在B
使用override
修飾符:
public abstract class A
{
public virtual void CallMe() { Console.WriteLine("I am A."); }
}
public class B : A
{
public override void CallMe() { Console.WriteLine("I am B."); }
}
B.CallMe()
不會覆蓋A.CallMe()
,它會陰影或隱藏A.CallMe()
。 由於CallMe
是非虛擬方法,因此編譯器根據a
變量的編譯時間類型選擇要調用的方法。 由於的編譯時間類型a
是class A
它將調用A.CallMe()
如果你想它來調用B.CallMe()
你需要使用virtual
的關鍵字A.CallMe()
這將使虛擬調度,其中應用程序將調用CallMe()
根據運行時類型的方法, a
是class B
。
請參見通過繼承隱藏
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.