Ich verwende GetParameter, um festzustellen, welche Parameter der Konstruktor benötigt. Ich kann eine Liste von ihnen bekommen. Jetzt möchte ich den ctor aufrufen. Ist das möglich, wenn es kein leeres gibt?Ist es möglich, einen Konstruktor dynamisch mit relfection aufzurufen, wenn kein leerer Standardkonstruktor vorhanden ist?
Antwort
Welche Sprache? Für C# könnten Sie verwenden
Activator.CreateInstance(typeof(X), constructorparm1, constructorparam2...)
Also, was bekomme ich zurück? ein generisches Objekt? dass ich zu dem Typ, mit dem ich mich beschäftige, handeln kann? – topwik
Sie erhalten ein Objekt zurück. Sie müssten es umwandeln oder den Operator AS verwenden, um das Objekt als den gewünschten Typ zu erhalten: X instance = (X) Activator.CreateInstance (typeof (X), constructorparm1, constructorparam2 ...) – saret
Ich denke, die Frage Ich muss dann fragen, wie erstelle ich einen Systemtyp von einer ParameterInfo? Ich bekomme eine Liste von Parametern für meinen ctor. Ich bekomme paramInfo zurück, das sagt mir die ersten 2 sind Bools und die zweite 2 sind Ints. Jetzt muss ich ein Array erstellen, das 2 Bools enthält, entweder auf True oder Fase gesetzt (basierend auf Benutzereingaben von UI oder was auch immer) und 2 Ints auf Benutzereingaben von UI gesetzt oder was hast du ... – topwik
Ist das wonach Sie suchen? Dadurch wird eine Instanz von SqlConnection erstellt, die eine Zeichenfolge an den Konstruktor übergibt. Wenn Sie mehr Werte übergeben möchten, fügen Sie sie einfach zum Array hinzu.
SqlConnection conn;
conn = (SqlConnection)System.Activator.CreateInstance(typeof(SqlConnection), new object[] { "Server=myserver" });
Console.WriteLine(conn.ConnectionString);
ja! aber meine Parameter müssen dynamischer sein. Ich muss auf den Konstruktor schauen und wenn er Parameter hat, muss ich jeden Parameter betrachten und an seinem Systemtyp, wie boolean oder int, und dann ein Array dieser Parameter erstellen, ihren Wert setzen und diesen dann an das create übergeben Instanz oder ctor.invoke ... ParameterInfo [] pi = t.GetConstructors() [0] .GetParameters(); foreach (ParameterInfo p in Pi) { if (p ist boolesch) {args [idx] = new Boolean (true); } } Ich weiß es nicht. Etwas wie das. Ich bin mir nicht sicher, was möglich ist. } – topwik
Geben Sie realType = Type.GetType (paramInfo.ParameterType.FullName); könnte den Trick machen. – topwik
Vergiss das. Obwohl es wahrscheinlich einen komplizierten Weg gibt, dies zu tun, werde ich sicherstellen, dass jeder der in meiner Assembly deklarierten Typen einen leeren Standardkonstruktor hat, so dass ich mich beim Abrufen des Objekts nicht um die Parameter kümmern muss. Dann sollte es nur darum gehen, die Eigenschaften durchzugehen und die Werte darauf zu setzen ... hoffentlich ist das einfacher. Irgendwelche Kommentare? Jemand? Wenn es genauso hart ist, wird SO definitiv eine andere Frage von mir sehen! – topwik
- 1. Kein leerer Konstruktor, wenn ein Dienst erstellen
- 2. Dynamisch zugewiesene Klasse "ist kein Konstruktor"
- 3. Ist es möglich, einen Funktionszeiger auf einen Konstruktor zu definieren?
- 4. Ist es möglich, einen performSegueWithIdentifier von einer anderen Klasse aufzurufen?
- 5. Ist es möglich, PowerShell-Cmdlets asynchron aufzurufen?
- 6. Ist es möglich, dynamisch Seiten hinzuzufügen, wenn WiX verwendet wird?
- 7. Gibt es einen Standardkonstruktor mit einem statischen Konstruktor in C#?
- 8. Spaltenanzahl stapeln, wenn kein Inhalt vorhanden ist
- 9. FormData ist kein Konstruktor
- 10. Ist es möglich, einen Konstruktor in C# zu überschreiben?
- 11. Ist es zulässig, den Destruktor/Konstruktor der Basisklasse explizit aufzurufen?
- 12. Konstruktor/Setter Injektion mit IoC in HttpHandler, ist es möglich?
- 13. Ist es möglich, Standardimplementierungen von Schnittstellen mit Mockitos doCallRealMethod aufzurufen?
- 14. Android - kein Standardkonstruktor in Sicht
- 15. Ist es möglich, die Bit.ly-API mit VB.net aufzurufen?
- 16. Ist es OK, abstrakte Methode vom Konstruktor in Java aufzurufen?
- 17. Android: Ist es möglich, einen Contentview dynamisch zu gestalten?
- 18. In C++, ist ein Konstruktor mit nur Standardargumenten ein Standardkonstruktor?
- 19. "Kein Header ist vorhanden" Fehler, während Header vorhanden ist
- 20. Warum übergibt dieser Code einen Parameter an einen Konstruktor, wenn keine Methode __init__ vorhanden ist?
- 21. Ist es möglich, in für dynamisch
- 22. AngularJS ‚FileConstructor ist kein Konstruktor‘
- 23. Ist es möglich, eine Instanz eines Objekts in Java zu erstellen, ohne den Konstruktor aufzurufen?
- 24. Film ist kein Konstruktor - Mungo
- 25. rowHasChanged undefiniert ist kein Konstruktor
- 26. Ist es möglich, eine überschriebene Methode vom Selbsttyp aufzurufen?
- 27. Ist es möglich, eine Robotermethode außerhalb der Roboterklasse "Haupt" aufzurufen?
- 28. Typoskript: undefined ist kein Konstruktor
- 29. TypeError: google.visualization.DataTable ist kein Konstruktor
- 30. Javascript: Typeerror: ... ist kein Konstruktor
Welche Sprache? Ich weiß, dass es in Java möglich ist, aber es gibt eine Reihe anderer Sprachen, die diese Art von Reflektion unterstützen (wie C#). – Jonathan
C# sicher. Danke Leute. Ich werde etwas davon ausprobieren. Prost. – topwik