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

Signaler
Messages postés
8
Date d'inscription
jeudi 21 avril 2005
Statut
Membre
Dernière intervention
14 janvier 2010
-
 Mr Thanks -
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

7 réponses

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

<b><i>---- Sevyc64  (alias Casy) ---- # LE PARTAGE EST NOTRE FORCE #   
Messages postés
8
Date d'inscription
jeudi 21 avril 2005
Statut
Membre
Dernière intervention
14 janvier 2010

erreur à la compilation :
" 'Project.Poi' is a 'type' but it used like a 'variable' "
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
32
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 #   
Messages postés
834
Date d'inscription
samedi 15 novembre 2008
Statut
Membre
Dernière intervention
14 janvier 2017
27
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!
Messages postés
8
Date d'inscription
jeudi 21 avril 2005
Statut
Membre
Dernière intervention
14 janvier 2010

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
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
32
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 #   
Messages postés
8
Date d'inscription
jeudi 21 avril 2005
Statut
Membre
Dernière intervention
14 janvier 2010

ok, merci
c'est ce que j'ai fait et ça fonctionne
merci et bonne soirée

spilz