Heim >Backend-Entwicklung >C++ >Wie kann ich von einer externen Assembly aus auf interne Klassen zugreifen, ohne die Hersteller-Assembly zu ändern?
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!