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

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

8 réponses

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