![](/img/trans.png)
[英]C# Indexer properties - Any way to virtualize the get and not the set method?
[英]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.