Copie d'une classe à une autre?
J'ai
class A
{
public int a;
public string b;
}
Comment puis-je copier Un à l'autre? En C++, je sais que je pourrais faire *a1 = *a2;
. Est-il quelque chose de similaire en C#? Je sais que je pourrais écrire une solution générique à l'aide de la réflexion, mais j'espère que quelque chose existe déjà.
Je suis envisage de modifier Une à une les valeurs null struct.
Étape 2 je vais avoir besoin de faire
class B : A {}
class C : A {}
et la copie de la base de données de B à C.
Pourquoi avez-vous besoin de faire cela?
Vous avez déjà demandé ce ici: stackoverflow.com/questions/2067725/...
Ce on nettoie son idée de la question. J'ai déjà voté pour fermer l'ancien.
Il a été un certain temps depuis que j'ai codé en C++. Votre exemple ne garantit que les deux
nope. L' *obj = est différente de obj=. obj = change le pointeur tout en *obj copies.
Vous avez déjà demandé ce ici: stackoverflow.com/questions/2067725/...
Ce on nettoie son idée de la question. J'ai déjà voté pour fermer l'ancien.
Il a été un certain temps depuis que j'ai codé en C++. Votre exemple ne garantit que les deux
a1
et a2
pointent vers le même objet en mémoire les modifications apportées à un sont reflétées dans les deux, non? Il n'est donc pas vraiment la copie vers un autre A
, droit?nope. L' *obj = est différente de obj=. obj = change le pointeur tout en *obj copies.
OriginalL'auteur | 2010-01-14
Vous devez vous connecter pour publier un commentaire.
J'ai utilisé la sérialisation binaire. Fondamentalement, sérialiser l'exemple d'un flux de mémoire. Ensuite, le désérialiser de la flux de mémoire. Vous aurez une copie binaire exacte. Il sera d'une copie en profondeur, plutôt que d'une copie.
Pour une copie, vous pouvez utiliser
Object.MemberwiseClone
Il ressemble à un Objet.MemberwiseClone ne fonctionne qu'avec les deux classes sont les mêmes et à l'intérieur de la méthode de la classe? Comment pourrais-je programme MySerializationMethod? Il semble que je vais être en utilisant la réflexion.
quelqu'un a posté ci-dessous: c-sharpcorner.com/UploadFile/sd_surajit/cloning05032007012620AM/... pas de réflexion nécessaire
OriginalL'auteur Jeremy Samuel
Voici un code simple qui fonctionne sur n'importe quelle classe, et pas seulement de la base.
OriginalL'auteur
En supposant que A est une simple classe, vous pouvez le faire
MemberwiseClone() est une copie, si votre classe devient complexe, avec des propriétés qui sont également des types de référence, cela ne fonctionnera pas pour vous.
D'accord. Il peut être plus pratique et évolutif qu'une approche personnalisée.
OriginalL'auteur womp
Ici, est ce que quelqu'un l'a déjà fait...
Copie en profondeur en C# (Clonage pour une classe définie par l'utilisateur)
OriginalL'auteur Partha Choudhury
il est le
ICloneable
interface qui offre unClone()
méthode.Clone sur msdn.
OriginalL'auteur gingerbreadboy
Ajouter les constructeurs:
Vous devriez également envisager de faire il immuable, surtout si vous envisagez de le faire dans une struct. Mutable structures sont mal.
Enfin, lorsque vous êtes en héritant de la classe, vous n'avez pas besoin de copier les membres de la classe de base dans la sous-classe.
set.
Merci. Comment voulez-vous déclarer que si vous voulez garder obtenir publique, et sur la même ligne ou séparément?
public int A { get; private set; }
OriginalL'auteur Mark Byers
Nous avons utilisé ce code avec succès:
Il y a peut être d'autres méthodes qui fonctionnent mieux, mais peut-être que ce sera vous aider à
Chris
OriginalL'auteur Chris Dunaway
Vous pouvez Cloner, vous pouvez définir un constructeur de copie. Pourquoi changer de classe pour struct juste parce que en C++, vous pouvez faire quelque chose dans 10 caractères. C# est différent. Les structures ont des avantages et des inconvénients.
OriginalL'auteur Hamish Grubijan