Wenn es internal
zu einer Baugruppe, die nicht die Ihre ist, und der Konstruktor ist markiert als private
ist der Autor der Baugruppe sehr bemüht, Sie von der Erstellung des Objekts abzuhalten.
Das Folgende ist wirklich böse, da Sie sich auf nicht-öffentliche Klassen und Methoden verlassen, die sich ohne Vorankündigung ändern können.
Hinzugefügt: System.ServiceModel.Channels.SelfSignedCertificate
ist die internal
Klasse, die ich zu verwenden versuche
Tun Sie dies nicht . Der Rahmen kann sich im Handumdrehen ändern und Ihren Code und all Ihre harte Arbeit ruinieren.
Das heißt, Sie könnten dies tun:
MethodInfo method = Type.GetType(assemblyQualifiedName).GetMethod("Create");
ABC o = (ABC)method.Invoke(null, new[] { "test" });
Dies ruft die static
Methode Create
. Eine andere Möglichkeit ist
MethodInfo method = Type.GetType(assemblyQualifiedName).GetConstructor(
BindingFlags.NonPublic | BindingFlags.Instance,
null,
new[] { typeof(string) },
null
);
ABC o = (ABC)method.Invoke(new[] { "test" });
die Reflexion verwendet, um den Konstruktor zu laden, der eine string
als Parameter.
Ein einfacher Weg, den assembly-qualifizierten Namen zu erhalten, ist
string name = typeof(somePublicType).Assembly.GetType("Namespace.ABC");
donde somePublicType
ist ein Typ, der öffentlich ist und sich in der gleichen Baugruppe befindet wie ABC
.
1 Stimmen
Sie möchten den privaten Konstruktor oder die statische Create-Methode aufrufen?
0 Stimmen
Es handelt sich um eine interne Klasse im Framework mit obiger Struktur. Ich möchte eine Instanz der Klasse mithilfe eines Konstruktors/einer statischen Methode erstellen und danach die MethodInfo verwenden, um die Methoden in der Klasse zu verwenden. object mc = assembly.CreateInstance( ---- <- kann es nicht verwenden, da es einen privaten Konstruktor hat MethodInfo mi = type1.GetMethod( "MyMethod", bf );