0

Unity ランタイムおよびエディター拡張機能用に、「MyLibrary.dll」と「MyLibraryEditor.dll」の 2 つのクラス ライブラリがあります。「MyLibrary.dll」内には、「MyLibraryEditor.dll」による使用のみを目的としたクラス メンバーがいくつかあります。

私が最初に考えたのは、internalキーワードを使用することでした。これは、名前空間への可視性が制限されると誤って考えたためです。代わりに、このキーワードがアセンブリへの可視性を制限していることは明らかです。

パフォーマンスを損なうことなく、一部のクラス メンバへのアクセスを "MyLibrary.dll" および "MyLibraryEditor.dll" に制限する最善の方法は何ですか? また、反射はオプションではありません。

関数を文書化しないことは喜ばしいことですが、残念ながら Intellisense (および MonoDevelop の同等物) にはこれらのメンバーが表示されます。

4

3 に答える 3

5

あるアセンブリの内部を別のアセンブリから見えるようにする場合はInternalsVisibleTo、内部を含むアセンブリで属性を使用できます。http://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.internalsvisibletoattribute.aspxを参照してください。

[assembly:InternalsVisibleTo("MyLibraryEditor")]

それが答えた場合、それを使用する必要がないようにアーキテクチャ設計を再考することをお勧めします。これは、必要なものだけでなく、他のアセンブリにすべての内部を開放するためです。

于 2012-06-20T16:40:26.763 に答える
3

メンバーを作成できますが、それらのメンバーへのアクセスを他のアセンブリに与えるためにinternal使用します。もちろん、それらは同じ[InternalsVisibleTo]アセンブリ内でも引き続き表示されます...それを回避する方法はありません。

私は主にInternalsVisibleToAttributeクラスをテストするために内部メンバーへのアクセスを許可するために使用し、テスト以外の目的でこれを行うことは避けようとしますが、時にはそれが役立つこともあります.

于 2012-06-20T16:40:58.083 に答える
0

これは、純粋な C# の概念では不可能です。あなたは2つの別々のアセンブリです。つまり、できる限り別々であり、.Netに関する限り、2つの間に関係はありません。

署名または検証を使用して、あるアセンブリを別のアセンブリなしで使用するのが難しいようにするためにいくつかのことを行うことができますが、クラス/メンバーの可視性を妨げるためにできることはありません。

于 2012-06-20T16:39:06.040 に答える