簡體   English   中英

方法可以是抽象的但不是虛擬的嗎?

[英]Can a method be abstract but not virtual?

據我了解,標記為抽象的方法是隱式虛擬的。 原因:假設給定對象的編譯時類型是抽象的。 如果正在調用對象的一個​​抽象方法,則要執行的實際方法是在對象的運行時類型中定義的方法。 不是嗎? 如果我是對的,那么抽象方法的行為就好像它也是虛擬的。

盡管如此,我已經成功地同時標記了一個抽象和虛擬的C#方法:

public abstract virtual void crazy();

我認為這意味着抽象方法不一定是虛擬的,而抽象方法實際上與虛擬方法正交。

我有什么問題? 抽象方法怎么不是虛擬的?

您不能將方法標記為abstractvirtual 這將導致編譯器錯誤:

抽象方法'Namespace.Class.Foo()'不能標記為虛擬

你的問題的其余部分是正確的: abstract方法是隱式virtual

來自MSDN

  • 抽象方法隱含地是虛方法。
  • 抽象方法聲明僅允許在抽象類中使用。
  • 因為抽象方法聲明沒有提供實際的實現,所以沒有方法體; 方法聲明只以分號結束,簽名后面沒有大括號({})。
  • 該實現由重寫方法提供,該方法是非抽象類的成員。
  • 在抽象方法聲明中使用靜態虛擬修飾符是錯誤的

“您不能將virtual修飾符與static,abstract,private或override修飾符一起使用。”

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM