OVH Cloud OVH Cloud

Syntaxe d'appel de constructeur

2 réponses
Avatar
Jean-Nicolas BERGER
Bonjour,
Nouveau en C#, j'ai un petit souci de syntaxe.
Je cherche au sein d'un constructeur à appeler un autre constructeur ayant
une autre signature, mais de manière conditionnelle (par exemple par sous la
forme public Animal (string nom,int age):this(age) ).
Voici ci-dessous mon code, avec le bloc de code redondant à la place duquel
j'aimerais appeler l'autre constructeur.
Quelqu'un pourrait-il m'aider?
merci d'avance.
JN.

public class Nombre
{
private enum TypeNombre
{
Type_Numerique,
Type_Indefini
}
private int Valeur_Numerique;
private TypeNombre Type;
public Nombre(int Valeur_int)
{
Type=TypeNombre.Type_Numerique;
Valeur_Numerique=Valeur_int;
}
public Nombre(string Valeur_chaine)
{
int Conversion;
try
{
Conversion=Convert.ToInt32(Valeur_chaine);
// Debut du code redondant
Type=TypeNombre.Type_Numerique;
Valeur_Numerique=Conversion;
//Fin du code redondant
// this(Conversion); --> Ca marche pas
}
catch
{
Type=TypeNombre.Type_Indefini;
}
}
public string Valeur()
{
switch (Type)
{
case TypeNombre.Type_Numerique:
return Valeur_Numerique.ToString();
case TypeNombre.Type_Indefini:
return "Non défini";
default:
return "Erreur interne";
}
}
}

2 réponses

Avatar
Paul Bacelar
Passez par une méthode d'initialisation (cf "Init" dans le code):

public class Nombre
{
private enum TypeNombre
{
Type_Numerique,
Type_Indefini
}
private int Valeur_Numerique;
private TypeNombre Type;
private void Init(int Valeur_int)
{
Type=TypeNombre.Type_Numerique;
Valeur_Numerique=Valeur_int;
}
public Nombre(int Valeur_int)
{
Init(Valeur_int);
}
public Nombre(string Valeur_chaine)
{
int Conversion;
try
{
Conversion=Convert.ToInt32(Valeur_chaine);
Init(Conversion);
}
catch
{
Type=TypeNombre.Type_Indefini;
}
}
public string Valeur()
{
switch (Type)
{
case TypeNombre.Type_Numerique:
return Valeur_Numerique.ToString();
case TypeNombre.Type_Indefini:
return "Non défini";
default:
return "Erreur interne";
}
}
}

--
Paul Bacelar
Demandeur d'emploi

"Jean-Nicolas BERGER" wrote in message
news:
Bonjour,
Nouveau en C#, j'ai un petit souci de syntaxe.
Je cherche au sein d'un constructeur à appeler un autre constructeur ayant
une autre signature, mais de manière conditionnelle (par exemple par sous


la
forme public Animal (string nom,int age):this(age) ).
Voici ci-dessous mon code, avec le bloc de code redondant à la place


duquel
j'aimerais appeler l'autre constructeur.
Quelqu'un pourrait-il m'aider?
merci d'avance.
JN.

public class Nombre
{
private enum TypeNombre
{
Type_Numerique,
Type_Indefini
}
private int Valeur_Numerique;
private TypeNombre Type;
public Nombre(int Valeur_int)
{
Type=TypeNombre.Type_Numerique;
Valeur_Numerique=Valeur_int;
}
public Nombre(string Valeur_chaine)
{
int Conversion;
try
{
Conversion=Convert.ToInt32(Valeur_chaine);
// Debut du code redondant
Type=TypeNombre.Type_Numerique;
Valeur_Numerique=Conversion;
//Fin du code redondant
// this(Conversion); --> Ca marche pas
}
catch
{
Type=TypeNombre.Type_Indefini;
}
}
public string Valeur()
{
switch (Type)
{
case TypeNombre.Type_Numerique:
return Valeur_Numerique.ToString();
case TypeNombre.Type_Indefini:
return "Non défini";
default:
return "Erreur interne";
}
}
}




Avatar
Jean-Nicolas BERGER
"Paul Bacelar" a écrit dans le message
de news:%
Passez par une méthode d'initialisation (cf "Init" dans le code):




C'est effectivement ce que j'envisageais de faire.
Je tenais juste à m'assurer qu'il n'y avait pas d'astuce de syntaxe qui
aurait pu m'échapper.
Merci encore.
JN