Wie legen Sie den Wert der Eigenschaft, wo es keine setter
Ich habe gesehen, verschiedene Fragen aufgeworfen und beantwortet, wo wir können, rufen Sie einen privaten setter mit der spiegelung, so wie dieses:
Ist es möglich, sich einen privaten setter durch Reflexion?
Allerdings habe ich einige code, die hat eine Eigenschaft, ich kann aber nicht, weil es keine setter, ich kann nicht fügen Sie einen setter als das ist nicht mein code. Gibt es eine Möglichkeit, irgendwie setzen Sie den Wert mithilfe der reflektion in diesem Szenario?
Eigenschaften haben keine Werte. Sie haben die Setzer, die möglicherweise ändern den Wert eines anderen Feldes. Wenn Sie interessiert sind zu finden, die backing-Bereich eine automatisch generierte Eigenschaft, siehe diese Frage: stackoverflow.com/questions/8817070/...
InformationsquelleAutor Luke De Feo | 2013-12-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich nicht empfehlen tun dies auf Ihre Anwendung aber für Testzwecke kann es sinnvoll sein,...
Vorausgesetzt, Sie haben:
Könnte man dies tun, wenn Ihr für Testzwecke, ich würde nicht vorschlagen, diese in Ihre runtime-code:
Das ist meine Idee als gut für diese. Die Antwort, die sagen sollte: "Versuchen zu finden, ein Feld, das hält die eigentlichen Daten, die Sie ändern möchten."
InformationsquelleAutor Abyte0
Haben Sie im Auge zu behalten, dass eine Eigenschaft nur syntaktischer Zucker für ein paar Methoden. Eine Methode (getter) gibt einen Wert vom Typ der Eigenschaft und eine Methode (setter) übernimmt den Wert der Eigenschaft type.
Es ist nicht erforderlich, dass die getter-und setter-tatsächlich oder nichts einstellen. Sie sind nur Methoden, so dass Sie erlaubt sind, etwas zu tun. Die einzige Voraussetzung ist, dass die get-Methode einen Wert zurückgeben. Von außen gibt es keine Möglichkeit, Sie können wirklich sagen, ob es ein Feld sichern. Die get-Methode erhalten werden konnte, berechnet jedes mal, wenn es aufgerufen wird. Es kann auf der Grundlage von anderen Eigenschaften.
So, Nein, es gibt nicht wirklich eine Möglichkeit im Allgemeinen "set" einer Eigenschaft, die nicht mit einem setter.
Der Punkt ist, dass Eigenschaften nicht brauchen, um den Feldern sichern, so können Sie nicht "wissen, das Feld sichern" im Allgemeinen, weil es nicht existieren kann. Zum Beispiel
public int Property { get { return 5; } }
durchaus gültig ist und nicht über ein Feld sichern. Darüber hinaus ist es möglich, eine Eigenschaft könnte abhängen auf mehreren Feldern sichern, weiter zu trüben, was es heißt, sich zu "setzen". E. g.public double Length { get { return Math.Sqrt(this.x * this.x + this.y * this.y); } }
.Das ist der springende Punkt bei der Reflexion, wenn. Sie können etwas wie der Typ.GetField-Methode, um zu bestimmen, wenn das Feld sichern auch vorhanden (Rückgabe von null, wenn nicht). Der OP klar, können Sie verwenden Sie reflektion, um den Wert zu setzen, das ist in der Regel möglich.
Kyle ' s Antwort klar, dass es kein allgemein Weg, dies zu tun und er ist korrekt.
Es ist eine Allgemeine Art und Weise, dies zu tun, kommt mit einer Ausnahme (wenn die Eigenschaft nicht automatisch implementiert). Aber an diesem Punkt, wir argumentieren Semantik.
InformationsquelleAutor Kyle