簡體   English   中英

在C#中,可以虛擬化每個方法嗎?

[英]In C#, is it ok to virtualize every method?

這可能會讓很多C#程序員感到畏縮,但是可以對基類中的每個方法進行virtual化 - 即使某些方法從未被覆蓋過嗎?

我需要這樣做的原因是我有一個特殊情況,我需要讓C#像Java一樣行事。 它實際上是Java程序的自動程序轉換。

我正在考慮將任何沒有基本方法的Java方法標記為virtual ,並將任何具有關聯基本方法的方法標記為override

除了缺乏靈活性,這樣做還有其他問題嗎?

是的,沒關系,但不一定是好的做法。 虛擬化有兩個方面:繼承和解耦(用於單元測試或用新的類替換其他類)。 在OO設計中優先考慮組合而不是繼承。您可以在類中使用接口而不是虛擬。 這將為您提供單元測試和組合所需的內容。 但是,憑借今天CPU的速度,如果一切都是虛擬的,我不會非常擔心額外的V表查找。

所以我建議,如果你能通過為java程序提供一個接口來解決你的問題,那就去做吧。 否則,不要因為虛擬方法而失眠。

這不僅可以,但有些應用程序需要這個。

例如,nHibernate 要求您將屬性標記為虛擬以進行映射。

還行吧。 不會因此導致不必要的行為,據我所知,虛方法不會導致類速度變慢。 那么,為什么不呢?

暫無
暫無

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

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