2012-06-20 33 views
0

對於Unity運行時和編輯器擴展,我有兩個類庫「MyLibrary.dll」和「MyLibraryEditor.dll」。 「MyLibrary.dll」中有幾個類成員僅供「MyLibraryEditor.dll」使用。隱藏除另一個特定程序集外的所有其他類的成員

我首先想到的是使用internal關鍵字,因爲我誤以爲,這個約束能見度命名空間。相反,顯然這個關鍵字限制了組件的可見性。

什麼是限制訪問某些類成員爲「MyLibrary.dll」和「MyLibraryEditor.dll」不損害性能的最佳方式是什麼?另外,反思不是一種選擇。

我很高興地根本就沒有記錄的功能,但遺憾的是智能感知(和MonoDevelop的等效)顯示這些成員。

回答

5

如果你想在一個組件內部可見從另一個組件,你可以使用InternalsVisibleTo屬性上包含的內部裝配。見http://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.internalsvisibletoattribute.aspx

[assembly:InternalsVisibleTo("MyLibraryEditor")] 

這回答,你可能要重新考慮你的建築設計,使您無需使用它,因爲它會打開所有內部的其他組件,不僅是那些你想。

+1

在此打了我10秒,所以我刪除了,並把它給你。 – SPFiredrake

+0

強大的你。 –

+0

不幸的是我受到限制,因爲我需要通過Unity MonoBehaviour序列化(不能手動完成)訪問這些屬性中的一部分。如果這是一個非Unity圖書館,那麼我將以完全不同的方式實現這一點。 –

0

這不可能使用純粹的C#概念。你是兩個獨立的程序集,這與你所能得到的程度相去甚遠,而且就.NET而言,兩者之間沒有任何關係。

你可以做一些事情簽字或驗證,使其所以這將是很難用一個組件沒有其他,但不是你可以做,以防止類/成員的可視性。

+2

你如何用'InternalsVisibleTo'來平方? –

+0

我不知道那個屬性是怎麼樣的! –

3

您可以讓會員internal但使用[InternalsVisibleTo]給這些成員訪問其他程序集。當然,它們在相同的裝配中仍然可見,當然......沒有辦法繞過它。

我主要使用InternalsVisibleToAttribute准予訪問內部成員測試類,並會嘗試避免這樣做對非測試目的 - 但有時也可以是有用的。

相關問題