Im Allgemeinen sollten Sie dies nicht tun. Wenn ein Typ als intern markiert wurde, bedeutet dies, dass Sie ihn nicht von außerhalb der Assembly verwenden dürfen. Es könnte in einer späteren Version entfernt, geändert usw. werden.
Allerdings Reflexion macht Sie auf Zugriffstypen und Mitgliedern ermöglichen , die nicht öffentlich sind - nur Blick für Überlastungen , die einen nehmen BindingFlags
Argument, und umfassen BindingFlags.NonPublic
in den Flags , dass Sie weitergeben.
Wenn Sie den vollständig qualifizierten Namen des Typs (einschließlich der Assembly-Informationen) haben, Type.GetType(string)
sollte nur der Aufruf funktionieren. Wenn Sie die Assembly im Voraus kennen und einen öffentlichen Typ innerhalb dieser Assembly kennen, ist die Verwendung typeof(TheOtherType).Assembly
zum Abrufen der Assemblyreferenz im Allgemeinen einfacher. Sie können dann aufrufen Assembly.GetType(string)
.
DataGrid
Befehl, dessen Parameter istSelectedItems
. Im Befehl wird der Parameterobject
nur vom Typ empfangenSelectedCellCollection
, auf den in meinem Code nicht zugegriffen werden kann. Ich brauche diese Art von Cheat in der Hoffnung, denobject
Parameter auf a zu setzenSelectedCellCollection
.So laden Sie die Baugruppe und den Typ, den Sie in Ihrem Beispiel angegeben haben:
Assembly design = Assembly.LoadFile(@"C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Design.dll"); Type designHost = design.GetType("System.ComponentModel.Design.DesignerHost");
quelle
Assembly.Load("System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")
var designHost = Type.GetType("System.ComponentModel.Design.DesignerHost, System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");