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

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

Votre réponse

8 réponses

cs_casy
Messages postés
7745
Date d'inscription
mercredi 1 septembre 2004
Dernière intervention
24 septembre 2014
- Modifié par NHenry le 22/04/2016 à 12:46
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
spilz
Messages postés
8
Date d'inscription
jeudi 21 avril 2005
Dernière intervention
14 janvier 2010
- 4 juil. 2009 à 13:04
0
Merci
erreur à la compilation :
" 'Project.Poi' is a 'type' but it used like a 'variable' "
Commenter la réponse de spilz
cs_casy
Messages postés
7745
Date d'inscription
mercredi 1 septembre 2004
Dernière intervention
24 septembre 2014
- Modifié par NHenry le 22/04/2016 à 12:46
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
cs_Robert33
Messages postés
835
Date d'inscription
samedi 15 novembre 2008
Dernière intervention
14 janvier 2017
- 4 juil. 2009 à 17:06
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
spilz
Messages postés
8
Date d'inscription
jeudi 21 avril 2005
Dernière intervention
14 janvier 2010
- 4 juil. 2009 à 19:48
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
cs_casy
Messages postés
7745
Date d'inscription
mercredi 1 septembre 2004
Dernière intervention
24 septembre 2014
- Modifié par NHenry le 22/04/2016 à 12:46
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
spilz
Messages postés
8
Date d'inscription
jeudi 21 avril 2005
Dernière intervention
14 janvier 2010
- 4 juil. 2009 à 21:18
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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.