Il dépendra entièrement de la mise en œuvre. Après tout, un événement peut être mis en œuvre comme vous le souhaitez. Si vous utilisez un événement comme champ alors vous devriez être en mesure de copier juste la valeur du champ:
using System;
class Test
{
public event EventHandler SomeEvent;
public Test(Test other)
{
this.SomeEvent = other.SomeEvent;
}
}
Cela est bien que les délégués sont immuables - souscrivant à un événement crée un nouveau délégué et assigne cette sur le terrain, de sorte que vos deux objets seraient indépendants. Si l'événement a été implémenté en utilisant quelque chose comme EventHandlerList
, vous voudriez créer un clone plutôt que d'utiliser une simple affectation de champ.
EDIT: Pour faire cela avec réflexion, vous utiliseriez simplement les champs comme les autres. Les événements de type champ sont simplement des événements soutenus par des champs. Si vous copiez déjà tous les champs d'une classe, vous n'aurez aucun travail supplémentaire à faire.
Sachez que si vous allez à un effort supplémentaire, vous ne faites une peu profonde copie - si vous avez un champ de type List<string>
, par exemple, votre nouvel objet fera référence au même objet que l'ancien objet , donc tout changement à la liste sera vu via les deux objets.
C# n'était pas conçu pour avoir des constructeurs de copie; avez-vous essayé 'ICloneable.Clone()' et 'Object.MemberwiseClone()'? – Mehrdad
Je pensais à implémenter ces interfaces, mais je voulais un constructeur très générique, parce que je l'implémente sur une classe héritée par plusieurs autres classes. Quant à Copy Constructor, ce n'est pas comme le cctor C++, c'est juste un constructeur qui prend un objet avec le même type de base et le clone. La raison pour laquelle je fais cela est parce que la classe doit également être éliminée, donc si j'ai besoin d'un objet qui persiste, au lieu de refaire tout le temps de disposition, faire une copie de l'objet semble plus facile :) –