Heim >Backend-Entwicklung >C++ >Wie kann ich von einer externen Assembly aus auf interne Klassen zugreifen, ohne die Hersteller-Assembly zu ändern?

Wie kann ich von einer externen Assembly aus auf interne Klassen zugreifen, ohne die Hersteller-Assembly zu ändern?

DDD
DDDOriginal
2024-12-25 05:44:21788Durchsuche

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

Zugriff auf interne Klassen über externe Assemblys

In Szenarien, in denen eine externe Assembly Zugriff auf ein Objekt eines internen Typs innerhalb eines vom Anbieter bereitgestellten Objekts erfordert Versammlung entsteht ein Dilemma. In diesem Artikel wird untersucht, wie Sie diese Herausforderung bewältigen können, ohne die Hersteller-Assembly zu ändern.

Das Dilemma

Stellen Sie sich das folgende Szenario vor: Eine externe Assembly enthält ein Objekt, das von einer Methode in zurückgegeben wird die Verkäuferversammlung. Dieses Objekt ist jedoch tatsächlich eine Instanz einer internen Klasse, auf deren Felder und Methoden von der externen Assembly aus nicht zugegriffen werden kann.

// 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
    }
}

Eine Lösung: InternalsVisibleTo Attribute

Von Standardmäßig sind interne Mitglieder nur innerhalb der Assembly zugänglich, in der sie definiert sind. Es gibt jedoch eine Ausnahme für „Freund“-Assemblys.

Um einer externen Assembly (der „Freund“-Assembly) Zugriff auf interne Mitglieder zu gewähren, fügen Sie das Attribut [assembly: InternalsVisibleTo] zur AssemblyInfo.cs-Datei von hinzu die Vendor-Assembly.

[assembly: InternalsVisibleTo("NameOfFriendAssembly")]

Dieses Attribut ermöglicht der externen Assembly den Zugriff auf die internen Mitglieder der Vendor-Assembly, als wären sie interne Mitglieder der Vendor-Assembly Baugruppe.

Hinweis: Diese Lösung ist nur für Testzwecke geeignet, da sie interne Mitglieder externen Baugruppen aussetzt.

Das obige ist der detaillierte Inhalt vonWie kann ich von einer externen Assembly aus auf interne Klassen zugreifen, ohne die Hersteller-Assembly zu ändern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn