Un constructeur appelle un autre constructeur de la même class...

Messages postés
8
Date d'inscription
jeudi 21 avril 2005
Statut
Membre
Dernière intervention
14 janvier 2010
- - Dernière réponse :  Mr Thanks - 22 avril 2016 à 11:04
Bonjour à tous,

je sais que plusieurs discutions portent sur le sujet, mais j'ai beau les lire, je n'arrive pas à comprendre comment faire ce que je veux :

voila le principe :


namespace Fichier_HEX
{
public class Poi
{
private double _latitude;

public Poi(double latitude) // mon constructeur "principal"
{
_latitude = Math.Abs(latitude);
}

public Poi(double Deg, double min)
{
double temp = Deg + min/60;
Poi(temp);
}
}
}

bien évidemment ça ne fonctionne pas :(
là c'est un exemple, dans la réalité le calcul dans le deuxième constructeur est plus compliqué

est-ce possible de faire des constructeurs dans cet esprit? comment?

merci d'avance
Afficher la suite 

7 réponses

Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
31
0
Merci
Tu as quoi comme message d'erreur ?

<b><i>---- Sevyc64  (alias Casy) ---- # LE PARTAGE EST NOTRE FORCE #   
Commenter la réponse de cs_casy
Messages postés
8
Date d'inscription
jeudi 21 avril 2005
Statut
Membre
Dernière intervention
14 janvier 2010
0
Merci
erreur à la compilation :
" 'Project.Poi' is a 'type' but it used like a 'variable' "
Commenter la réponse de spilz
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
31
0
Merci
Ok j'avais zappé la dernière ligne de ton constructeur, c'est pour cela que ça marchait chez moi (et accessoirement que je ne comprennais pas le titre de ton post )

Tu n'as pas à rapeller le contructeur de ta classe, ta classe est déjà construite. Par contre, comme dans le premier constructeur, c'est la variable ionterne qui est à initialiser :

namespace Fichier_HEX

{

    public class Poi

    {

        private double _latitude;

        public Poi(double latitude)    // mon constructeur "principal"

        {

            _latitude = Math.Abs(latitude);

        }

        public Poi(double Deg, double min)

        {

            <strike>double temp = Deg + min/60;
</strike>
            <strike>Poi(temp);</strike>
            _latitude = Deg + min/60;

        }

    }

}

<b><i>---- Sevyc64  (alias Casy) ---- # LE PARTAGE EST NOTRE FORCE #   
Commenter la réponse de cs_casy
Messages postés
834
Date d'inscription
samedi 15 novembre 2008
Statut
Membre
Dernière intervention
14 janvier 2017
26
0
Merci
bonjour
Pour info, pour appeler un constucteur depuis un autre, il faut mettre l'appel en série:
ex:
public Poi(double deg, double min) : this (deg + min/60) {}

mais évidament dans ce cas cela rend le code complex pour rien, la solution proposée par casy reste la meilleure.

C# is amazing, enjoy it!
Commenter la réponse de cs_Robert33
Messages postés
8
Date d'inscription
jeudi 21 avril 2005
Statut
Membre
Dernière intervention
14 janvier 2010
0
Merci
en fait j'ai donné ici un exemple simple, en réalité le code de transformation est beaucoup plus complexe et long
il y a aussi plusieurs constructeurs en cascades pour tout paramettrer et je ne voullais pas recopier tout le code à chaque fois

si je comprends bien je ne vais pas avoir le choix, il faudra que je recopie à chaque fois le code?

merci de votre aide

spilz
Commenter la réponse de spilz
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
31
0
Merci
Le code n'a pas forcément besoin d'être dans le constructeur, il peut très bien être arrangé dans des procédures ou fonctions propres à ta classe qui seront appelées depuis les différents constructeurs

<b><i>---- Sevyc64  (alias Casy) ---- # LE PARTAGE EST NOTRE FORCE #   
Commenter la réponse de cs_casy
Messages postés
8
Date d'inscription
jeudi 21 avril 2005
Statut
Membre
Dernière intervention
14 janvier 2010
0
Merci
ok, merci
c'est ce que j'ai fait et ça fonctionne
merci et bonne soirée

spilz
Commenter la réponse de spilz