[英]If a virtual method is declared abstract
我的朋友問我抽象方法是否可以有虛擬修飾符。 我說, 不 。 因為抽象方法也隱式也是虛方法,所以它不能具有虛擬修飾符。
但在閱讀MSDN文章之一時 ,我看到了這一點:
...如果虛擬方法被聲明為abstract ,則它仍然是從抽象類繼承的任何類的虛擬方法。 繼承抽象方法的類無法訪問方法的原始實現 - 在前面的示例中,類F上的DoWork無法在類D上調用DoWork。這樣,抽象類可以強制派生類為虛方法提供新方法實現....
我無法正確理解第一句話。 你能不能解釋一下他們想說什么?
謝謝。
當您查看引用段落正上方的代碼示例時,它會變得更清晰:
public class D
{
public virtual void DoWork(int i)
{
// Original implementation.
}
}
public abstract class E : D
{
public abstract override void DoWork(int i);
}
虛擬方法D.DoWork
由E
繼承,並且在那里聲明為abstract。 該方法仍然是虛擬的 ,它也剛剛變得抽象 。
正確地說,抽象方法總是虛擬的。 如果你的朋友仍然不相信,這里有一個官方報價 :
抽象方法隱含地是虛方法。
抽象類可以使用abstract
類覆蓋virtual
成員:
public class B
{
public virtual void M() { }
}
public abstract class D : B
{
public abstract override void M();
}
public abstract class D2 : D
{
public override void M() { }
}
句子說D2
必須覆蓋void M()
,因為它在D
被聲明為abstract。 如果它被聲明為D2 : B
,這將是可選的,但是就目前而言, D2
必須遵守D
指定的合同,但M()
也將像任何其他成員一樣覆蓋“正常”虛擬成員,因為M()
既是虛擬的也是抽象的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.