外部アセンブリから内部クラスへのアクセス
外部アセンブリがベンダー提供のアセンブリ内の内部型のオブジェクトへのアクセスを必要とするシナリオ組み立て中に苦境が生じます。この記事では、ベンダー アセンブリを変更せずにこの課題を克服する方法について説明します。
ジレンマ
次のシナリオを考えてみましょう。外部アセンブリには、次のメソッドによって返されたオブジェクトが含まれています。ベンダーのアセンブリ。ただし、このオブジェクトは実際には内部クラスのインスタンスであり、そのフィールドとメソッドは外部アセンブリからアクセスできません。
// Vendor assembly public class Vendor { private InternalClass _internal; public object Tag { get { return _internal; } } } // External assembly public class MyClass { public void AccessTest() { Vendor vendor = new Vendor(); object value = vendor.Tag; // Here we want to access InternalClass.test } }
解決策: InternalsVisibleTo Attribute
Byデフォルトでは、内部メンバーは、それが定義されているアセンブリ内でのみアクセスできます。ただし、「フレンド」アセンブリには例外があります。
外部アセンブリ (「フレンド」アセンブリ) に内部メンバーへのアクセスを許可するには、[assembly: InternalsVisibleTo] 属性を AssemblyInfo.cs ファイルに追加します。
[assembly: InternalsVisibleTo("NameOfFriendAssembly")]
この属性により、外部アセンブリは、ベンダー アセンブリの内部メンバーであるかのように、ベンダー アセンブリの内部メンバーにアクセスできます。 Assembly.
注: このソリューションは、内部メンバーを外部アセンブリに公開するため、テスト目的にのみ適しています。
以上がベンダー アセンブリを変更せずに、外部アセンブリから内部クラスにアクセスするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。