2014-02-11 22 views
0

首先,讓我說我已經看到了這種問題的一種解決方案,但是我發現這主要只用於測試目的。如何從C#中的外部程序集訪問「內部」修飾符類屬性

任何人都可以給我一個很好的從C#中的外部程序集調用內部類的內部靜態屬性的方法嗎?

如果有人能給我一個C#的小例子,我將不勝感激。我知道使用「AssemblyVisibleTo」,但我被告知這不是一個好的編碼方式。

+2

這整個問題不是一個好主意。但是,如果你需要這樣做,'[InternalsVisibleTo]'是正確的方法。 – SLaks

+6

唯一的「良方」就是不要這樣做。該屬性很可能因爲某種原因而成爲「內部」,並且不希望外部代碼對其進行修改。 – shf301

+1

「internal」關鍵字背後的整個想法是不是阻止'external' assembly訪問它? – crush

回答

1

有三種方式可以訪問internal數據(無論是靜態或沒有):

  1. 反思 - 這違背保持數據internal因爲你現在有外部的代碼,直接依賴於目的內部實現
  2. InternalsVisibleTo屬性 - 你被告知這是「不是一種好的代碼方式」,大多數人會同意,但是你沒有給出替代方案(因此你的問題)。這與反射(它使客戶端代碼更清晰)具有相同的缺點。
  3. 添加一個面向公衆的API - 如果這個數據是有用的以外的程序集那麼最好的解決方案可能是在其上添加一個公共API!您仍然可以隱藏內部機制,只要外部接口保持不變,您就可以更改內部內部機制。

因此,請向您的客戶推薦這三種替代方案,看看他們更喜歡哪一種。

+0

嗨斯坦利先生,謝謝你這對我的建議非常有幫助,它可以幫助我很多,我會把它帶給他,看看他有什麼話要說,我們已經有了一個強大的方法來做到這一點,它是一個非常強大和有趣的代碼(據我所知),所以我我無法理解它是如何的在其他地方實施。我能感覺到並看到它。但我不知道如何遵循相同的模式(也許是因爲他告訴我使用InternalVisibleTo屬性的方式不是很好,無論如何,我需要明天提出一個解決方案:(對我來說很傷心)我會試試:)再次感謝您的幫助。:) – Learner