2010-07-01 71 views

回答

4

技術上可以通過框架使用的技術代碼重寫,如Moles。不過,我不會推薦這個。相反,你最好使用一個包裝類,它將委託調用給一個包含的對象,並且覆蓋你僅僅需要改變的特定方法之後的行爲。

+0

謝謝,你能給我一個包裝類的例子嗎?另一個問題是編譯類需要調用這些類中的其他方法,所以如果我重寫它們,它們需要調用重寫的方法。 – markvpc 2010-07-01 15:05:31

+0

包裝僅適用於您使用該類,因爲您可以在訪問它時構建和使用包裝器。包裝類上的其他方法不會意識到包裝,因此不會按照您的意圖工作。您可能需要重新考慮您的設計以完全避免此問題,因爲進入IL重寫以注入彎路可能會使您的代碼難以維護。 – 2010-07-01 15:15:50

0

不,實質上。

正如你所說,你最好的選擇應該是派生你自己的類並覆蓋有問題的方法(假設它不是密封的)。

您可以使用extension method爲課程添加功能。

0

我不這麼認爲。您可以創建一個擴展方法,但不能訪問私有/受保護/內部成員。

0

如果你有源代碼但不想改變它 - 分支它。

如果你可以用稍微不同的方法簽名,寫一個擴展方法。

如果以上都不適合您,並且類必須有具有相同的名稱,請繼承一個具有相同名稱的類,覆蓋並將該類放置在不同的名稱空間中。通過名稱空間區分原始。只是繼承正常可能會更容易維護,雖然...

如果你仍然不開心,我不能幫你。

0

不是我所知的。你能解釋一下你的情況嗎?爲什麼你需要做這樣的事情?