2013-08-20 42 views
2

我正在尋找一種方法來從派生類中使用TypeBuilder從基類調用私有方法。我知道這可以通過簡單地通過反射調用方法來完成,但試圖調用MethodAccessException中的typebuilder結果生成的passthrough方法。有沒有人找到解決這個問題的方法?從派生類調用私有方法與Reflection.Emit

回答

4

沒有「問題」。你不允許打私人方法 - 這就是爲什麼他們是私人的。事實上,當你有適當的信任時,你可以通過反思來做到這一點,這實際上是一個後門,並不表示這是你應該能夠以其他方式完成的事情。

如果在全部可能你應該重新設計,以避免調用私人方法的願望。如果你絕對有來調用它,使用反射 - 這是醜陋的事實表明你處於一個醜陋的情況。

+1

這個想法來自於需要在單元測試下快速獲得遺留代碼而無需立即重新設計。我很清楚,這個功能打破封裝,並不意味着把它作爲一個問題,我只是好奇,看看是否有可能。 – dSquared

+1

@dSquared:如果它用於測試(所以你的遺留代碼是在你的控制之下),我會考慮把它作爲一個內部方法(有些跡象表明它通常是私有的),然後使用InternalsVisibleTo來訪問它來自測試裝配。 –

+1

這與保持方法一樣受保護(派生並在測試類中調用)是我經常使用的兩種解決方案,並且看起來工作得很好。我想我只是想找一種方法來改變訪問修飾符以適應測試。 – dSquared

相關問題