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

spilz Messages postés 8 Date d'inscription jeudi 21 avril 2005 Statut Membre Dernière intervention 14 janvier 2010 - 4 juil. 2009 à 09:31
 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

7 réponses

cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
Modifié par NHenry le 22/04/2016 à 12:46
Tu as quoi comme message d'erreur ?

<b><i>---- Sevyc64  (alias Casy) ---- # LE PARTAGE EST NOTRE FORCE #   
0
spilz Messages postés 8 Date d'inscription jeudi 21 avril 2005 Statut Membre Dernière intervention 14 janvier 2010
4 juil. 2009 à 13:04
erreur à la compilation :
" 'Project.Poi' is a 'type' but it used like a 'variable' "
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
Modifié par NHenry le 22/04/2016 à 12:46
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 #   
0
cs_Robert33 Messages postés 834 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 14 janvier 2017 33
4 juil. 2009 à 17:06
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!
0
Merci Robert
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
spilz Messages postés 8 Date d'inscription jeudi 21 avril 2005 Statut Membre Dernière intervention 14 janvier 2010
4 juil. 2009 à 19:48
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
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
Modifié par NHenry le 22/04/2016 à 12:46
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 #   
0
spilz Messages postés 8 Date d'inscription jeudi 21 avril 2005 Statut Membre Dernière intervention 14 janvier 2010
4 juil. 2009 à 21:18
ok, merci
c'est ce que j'ai fait et ça fonctionne
merci et bonne soirée

spilz
0
Rejoignez-nous