我在C#中有一個類庫,編譯成一個dll。是否可以改變某個特定項目的編譯類方法中的某些內容,而無需觸摸原始源代碼或通過繼承創建新類?在C#編譯庫中沒有繼承的重寫方法#
0
A
回答
4
技術上可以通過框架使用的技術代碼重寫,如Moles。不過,我不會推薦這個。相反,你最好使用一個包裝類,它將委託調用給一個包含的對象,並且覆蓋你僅僅需要改變的特定方法之後的行爲。
0
0
我不這麼認爲。您可以創建一個擴展方法,但不能訪問私有/受保護/內部成員。
0
如果你有源代碼但不想改變它 - 分支它。
如果你可以用稍微不同的方法簽名,寫一個擴展方法。
如果以上都不適合您,並且類必須有具有相同的名稱,請繼承一個具有相同名稱的類,覆蓋並將該類放置在不同的名稱空間中。通過名稱空間區分原始。只是繼承正常可能會更容易維護,雖然...
如果你仍然不開心,我不能幫你。
0
不是我所知的。你能解釋一下你的情況嗎?爲什麼你需要做這樣的事情?
0
隨着一些涉及反射的重重入侵和reflection emit轉化爲新的application domain,當然。但我懷疑這是否值得。
相關問題
- 1. 有沒有在C#方法繼承
- 2. Javascript - 在克隆庫中重寫繼承的方法
- 3. 重載C++繼承不編譯?
- 4. CPP多態性和繼承 - 編譯器沒有發現方法
- 5. C++編寫,從多重繼承類
- 6. 編譯繼承程序C++
- 7. 有沒有辦法在C#中編寫LLVM前端編譯器?
- 8. 從繼承類重寫方法
- 9. Java繼承和方法重寫程序
- 10. 重寫繼承泛型方法
- 11. 有沒有辦法來重寫繼承的生成策略?
- 12. 擴展方法中重寫繼承的方法
- 13. 是多重繼承一個編譯器編寫者的問題? - C++
- 14. 在JS中編寫原型繼承的最乾淨的方法
- 15. 有沒有辦法在Python中識別繼承的方法?
- 16. 在C#中繼承的方法屬性?
- 17. 在Java繼承中限制重寫方法的範圍
- 18. 繼承相關的C++編譯錯誤
- 19. 沒有繼承的人如何重寫一個類方法並從新方法中調用原始方法?
- 20. 在C#中的繼承問題 - 重寫內部方法可能嗎?
- 21. 在C或C++中,有沒有辦法擴展一個沒有繼承的類?
- 22. 私有方法,繼承和元編程?
- 23. 繼承和方法重載
- 24. C++重寫繼承的靜態常量
- 25. 重寫和繼承
- 26. 編譯後的java繼承
- 27. 在MSBuild中重寫繼承的任務
- 28. 方法在繼承的情況下重寫
- 29. C++/COM/Proxy Dlls:方法重寫/方法轉發(COM實現繼承)
- 30. C++繼承和函數重寫
謝謝,你能給我一個包裝類的例子嗎?另一個問題是編譯類需要調用這些類中的其他方法,所以如果我重寫它們,它們需要調用重寫的方法。 – markvpc 2010-07-01 15:05:31
包裝僅適用於您使用該類,因爲您可以在訪問它時構建和使用包裝器。包裝類上的其他方法不會意識到包裝,因此不會按照您的意圖工作。您可能需要重新考慮您的設計以完全避免此問題,因爲進入IL重寫以注入彎路可能會使您的代碼難以維護。 – 2010-07-01 15:15:50