[C#] Copie ou référence d'objets [Fermé]
Signaler
Lust
teebo
- Messages postés
- 245
- Date d'inscription
- mercredi 28 septembre 2005
- Statut
- Membre
- Dernière intervention
- 12 septembre 2007
teebo
- Messages postés
- 33478
- Date d'inscription
- jeudi 14 octobre 2004
- Statut
- Modérateur
- Dernière intervention
- 24 février 2011
A voir également:
- Une référence d'objet est requise pour la propriété la méthode ou le champ non statique
- [C#] Une référence d'objet est requise ✓ - Forum - C#
- La référence d'objet n'est pas définie à une instance d'un objet ✓ - Forum - C#
- La reference d'objet n'est pas definie a une instance d un objet ✓ - Forum - VB / VBA
- La référence d'objet n'est pas définie à une insta - Forum - SQL Server
- Une référence objet est requise pour la méthode non statique - Forum - C#
11 réponses
56ka
- Messages postés
- 140
- Date d'inscription
- dimanche 15 avril 2007
- Statut
- Membre
- Dernière intervention
- 2 novembre 2009
Non non c'est bon.
Donc le C# a bien une lacune : on ne peut pas copier directement un objet...
En c#, obj1 = obj2; revient à faire obj1 = & obj2; en C++...
En C++ tu peux copien directement l'objet si tu fais obj1 = obj2;
Donc merci beaucoup :o)
Donc le C# a bien une lacune : on ne peut pas copier directement un objet...
En c#, obj1 = obj2; revient à faire obj1 = & obj2; en C++...
En C++ tu peux copien directement l'objet si tu fais obj1 = obj2;
Donc merci beaucoup :o)
teebo
- Messages postés
- 33478
- Date d'inscription
- jeudi 14 octobre 2004
- Statut
- Modérateur
- Dernière intervention
- 24 février 2011
Compris :o)
Prévois une fonction "Clone" dans ta classe, comme ça tu dis "obj2 = obj1.Clone()" et ton problème est résolu (dans les sous classes il faut que la fonction clone soit implémentée, les sous classes ayant un constructeur)
Ou alors j'ai loupé un épisode?
Prévois une fonction "Clone" dans ta classe, comme ça tu dis "obj2 = obj1.Clone()" et ton problème est résolu (dans les sous classes il faut que la fonction clone soit implémentée, les sous classes ayant un constructeur)
Ou alors j'ai loupé un épisode?
teebo
- Messages postés
- 33478
- Date d'inscription
- jeudi 14 octobre 2004
- Statut
- Modérateur
- Dernière intervention
- 24 février 2011
Bonjour,
Si c'est une classe, et non une structure, si tu ne précises pas, ça sera une réference.
Néamoins, dans ton cas je définirai tout en static dans cette classe, et je ne la passerai pas en paramètre des constructeurs mais j'utiliserai directement la classe
Voir à ce sujet:
https://www.dofactory.com/net/singleton-design-pattern
Si c'est une classe, et non une structure, si tu ne précises pas, ça sera une réference.
Néamoins, dans ton cas je définirai tout en static dans cette classe, et je ne la passerai pas en paramètre des constructeurs mais j'utiliserai directement la classe
Voir à ce sujet:
https://www.dofactory.com/net/singleton-design-pattern
Lust
- Messages postés
- 245
- Date d'inscription
- mercredi 28 septembre 2005
- Statut
- Membre
- Dernière intervention
- 12 septembre 2007
tiens voila une partie du code de ma class :
et donc je l'utilise comme ceci après :
public class optExplorer { /// <param name="strUrl">URL du domaine</param> /// <param name="strPath">Chemin de la base de données</param> public optExplorer(string strUrl, string strPath) { this.strUrl = strUrl; this.strPath = strPath; oleDBCnc = new OleDbConnection(); oleDBCnc.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\"" + strPath + "\";Persist Security Info=True"; oleDBCnc.Open(); } #region Option private string strUrl; private string strPath; private OleDbConnection oleDBCnc; /// <summary> /// Obtient ou défini l'URL du domaine /// </summary> public string UrlDomaine { get { return this.strUrl; } set { this.strUrl = value; } } /// <summary> /// Obtient ou défini le chemin des données de stockage /// </summary> public string cheminData { get { return this.strPath; } set { this.strPath = value; } } /// <summary> /// Obtient la connexion à la base de données /// </summary> public OleDbConnection cnc { get { return this.oleDBCnc; } } #endregion }
et donc je l'utilise comme ceci après :
#region Variables private optExplorer optionEploration; #endregion #region Constructeur public urlExplorer(optExplorer optionEploration) { this.optionEploration = optionEploration; } #endregion
teebo
- Messages postés
- 33478
- Date d'inscription
- jeudi 14 octobre 2004
- Statut
- Modérateur
- Dernière intervention
- 24 février 2011
Oui et?
Lust
- Messages postés
- 245
- Date d'inscription
- mercredi 28 septembre 2005
- Statut
- Membre
- Dernière intervention
- 12 septembre 2007
ben je voulais savoir si je fesais une référence ou une copie avec ca :
private optExplorer optionEploration; public urlExplorer(optExplorer optionEploration) { this.optionEploration = optionEploration; }
teebo
- Messages postés
- 33478
- Date d'inscription
- jeudi 14 octobre 2004
- Statut
- Modérateur
- Dernière intervention
- 24 février 2011
Une référence, mais tu devrais regarder le principe du singleton dans ton cas.
56ka
- Messages postés
- 140
- Date d'inscription
- dimanche 15 avril 2007
- Statut
- Membre
- Dernière intervention
- 2 novembre 2009
Salut
J'ai besoin de copier une classe dans mon cas. Et le singleton ne m'aide pas...
Je dois envoyer un objet en paramètre mais je veux qu'il se copie et non s'envoie par référence...
Comment fait-on ?
Merci
J'ai besoin de copier une classe dans mon cas. Et le singleton ne m'aide pas...
Je dois envoyer un objet en paramètre mais je veux qu'il se copie et non s'envoie par référence...
Comment fait-on ?
Merci
56ka
- Messages postés
- 140
- Date d'inscription
- dimanche 15 avril 2007
- Statut
- Membre
- Dernière intervention
- 2 novembre 2009
Yop
Ben en fait il doit bien avoir moyer de faire genre :
Comme si c'était des string
Mici
Ben en fait il doit bien avoir moyer de faire genre :
MaClass obj1 = new MaClass(); Maclass obj2 = obj1; obj1.Prop1 = "CR"; obj2.Prop1 = "23"; MessageBox.Show( obj1.Prop1 + obj2.Prop1 ); // CR23
Comme si c'était des string
Mici
56ka
- Messages postés
- 140
- Date d'inscription
- dimanche 15 avril 2007
- Statut
- Membre
- Dernière intervention
- 2 novembre 2009
J'aurais du mal à t'expliquer, mais en gros j'aimerai mettre des objets d'une classe abstract dans un tableau mais comme c'est une classe abstract, je peux pas faire new ClasseDeBase() afin de remplir mon tableau...
je te mets une illustration rapide :
Comme on peut pas instancier une classe abstract, j'ai fait comme ceci
C'est compréhendable ?
Mais s'il y a un meilleur moyen, je ne le connais pas...
je te mets une illustration rapide :
public abstract class ClasseDeBase { public static List<ClasseDeBase> GetAll() { List<ClasseDeBase> tmpList = new List<ClasseDeBase>(); List<string> tmpOldList = blabla(); // par un savant code je liste des objets ClasseDeBase tmpObj = new ClasseDeBase(); // ça c'est impossible alors j'ai feinté (voir code à la suite) tmpObj.Prop1 = tmpOldList; tmpList.Add( tmpObj ); return tmpList; } }
Comme on peut pas instancier une classe abstract, j'ai fait comme ceci
public abstract class ClasseDeBase { public static List<ClasseDeBase> GetAll(ClasseDeBase newClass) { List<ClasseDeBase> tmpList = new List<ClasseDeBase>(); List<string> tmpOldList = blabla(); // par un savant code je liste des objets ClasseDeBase tmpObj = newClass; // c'est ici que j'aimerai copier, pour "simuler" un NEW tmpObj.Prop1 = tmpOldList; tmpList.Add( tmpObj ); return tmpList; } } public class Class2 : ClasseDeBase { public static List<Class2> GetAllClass2() { List<ClasseDeBase> tmpList = GetAll( (ClasseDeBase) new Class2() ); // je fais un cast pour lui envoyer un new ClasseDeBase List<Class2> tmpListClass2 = new List<Class2>(); foreach(ClasseDeBase iBase in tmpList) // on convertit le tableau de List<ClasseDeBase> à List<Class2> { tmpListClass2 .Add( (Class2)iBase ); } } }
C'est compréhendable ?
Mais s'il y a un meilleur moyen, je ne le connais pas...