C# - Klon-Event-Handler
Habe ich eine Klasse mit mehreren Event-Handler (unter anderem):
public GameObject
{
public event EventHandler<EventArgs> Initialize;
public event EventHandler<EventArgs> BeginStep;
....
}
Ich möchte in der Lage sein, eine Clone()
Funktion GameObject, das gibt ein exaktes Duplikat des Objekts, hieß es weiter. Ich habe versucht, es zu tun mögen dieses:
public GameObject Clone()
{
var clone = new GameObject()
{
Initialize = this.Initialize,
BeginStep = this.BeginStep,
};
}
Aber, es scheint, dass es clone.BeginStep
auf das gleiche Objekt zeigen, wie this.BeginStep
anstatt eine Kopie zu erstellen. So, wie mache ich eine Kopie von einen EventHandler-Objekt?
- hat dieser Ihnen helfen? stackoverflow.com/questions/78536/cloning-objects-in-c
Du musst angemeldet sein, um einen Kommentar abzugeben.
Brauchen Sie nicht zu befürchten, dass. Die
EventHandler<EventArgs>
- Objekt ist unveränderlich, so dass jede änderung in der Liste der Listener entweder Objekt wird dazu führen, dass Objekt, um eine neueEventHandler<EventArgs>
Instanz, die mit den aktualisierten Aufruf-Liste. Diese änderung wird nicht in die andereGameObject
.Versuchen Sie es mit der + = - operator. Ich habe nicht einmal wissen, war es möglich, zuweisen einer Veranstaltung.
Auch, alle Delegierten, sind unveränderlich Wert Arten, daher Sie nicht haben, um sorgen machen, Sie auf das gleiche Objekt, wenn Sie einen Vorgang wie oben, die ganze delegieren kopiert (geklont, wenn man will).
Es hängt davon ab, ob die Ereignisse delegieren an definierten Methoden, die in der GameObject-Klasse, oder ob Sie zu delegieren, um einige der anderen Beobachter Instanz der Klasse.
Wenn die Ereignisse behandelt werden, die in Methoden definiert, die in Ihrer GameObject Klasse, und Sie wollen Ereignisse in der clone bearbeitet von Methoden in Ihrem Klon-Instanz, die Sie bekommen können verwenden Sie reflektion, um das Verfahren Informationen von der ursprünglichen event-Handler erstellen Sie einen neuen Delegaten mit der geklonte Instanz und den Namen der Methode, und weisen Sie dann den neuen Delegaten das geklonte Ereignis-handler.
Wenn die Ereignisse behandelt werden, die in einer anderen Klasse, dann brauchen Sie nicht, etwas zu tun, aber alle event-Benachrichtigungen für die ursprüngliche Instanz und geklonte Instanz willhave die gleichen Handler. Wenn das ist nicht, was Sie wollen, dann müssen Sie die event-Delegierten, nachdem Sie Klonen.
Brauchen Sie nicht zu Klonen, die Ereignisse, wie Sie nicht brauchen, um Klon-Methoden des Quellobjekts. Wenn Sie Klonen, alles, was Sie wirklich brauchen, zu duplizieren sind die member/property-Werte.
Werden Sie wollen, etwas zu tun, ähnlich zu dem, was gepostet wurde auf Tiefes Klonen von Objekten
Ihre Klasse muss serialisierbar sein.
EDIT: Wie ich schon sagte, es war, basierend auf dem code, den ich verlinkt, und ich beeilte mich, die Antwort zu geben. Sollten geprüft haben, es ein wenig näher.