ホームページ >バックエンド開発 >C++ >ベンダー アセンブリを変更せずに、外部アセンブリから内部クラスにアクセスするにはどうすればよいですか?

ベンダー アセンブリを変更せずに、外部アセンブリから内部クラスにアクセスするにはどうすればよいですか?

DDD
DDDオリジナル
2024-12-25 05:44:21788ブラウズ

How Can I Access Internal Classes from an External Assembly Without Modifying the Vendor Assembly?

外部アセンブリから内部クラスへのアクセス

外部アセンブリがベンダー提供のアセンブリ内の内部型のオブジェクトへのアクセスを必要とするシナリオ組み立て中に苦境が生じます。この記事では、ベンダー アセンブリを変更せずにこの課題を克服する方法について説明します。

ジレンマ

次のシナリオを考えてみましょう。外部アセンブリには、次のメソッドによって返されたオブジェクトが含まれています。ベンダーのアセンブリ。ただし、このオブジェクトは実際には内部クラスのインスタンスであり、そのフィールドとメソッドは外部アセンブリからアクセスできません。

// 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。