Puis-je appeler un constructeur surchargé à partir d'un autre constructeur de la même classe en C# ?
Réponses
Trop de publicités?Si vous voulez savoir si vous pouvez faire du chaînage de ctor en C#, la réponse est oui. La question a déjà été posée.
Cependant, il semble, d'après les commentaires, que ce que vous voulez vraiment demander est Puis-je appeler un constructeur surchargé à partir de sur un autre constructeur avec un pré/post traitement ?
Bien que le C# n'ait pas la syntaxe pour le faire, vous pourriez le faire avec une fonction d'initialisation commune (comme vous le feriez en C++ qui ne supporte pas le chaînage de ctor)
class A
{
//ctor chaining
public A():this(0)
{ Console.WriteLine("default ctor"); }
public A(int i)
{ Init(i); }
// what you want
public A(string s)
{
Console.WriteLine("string ctor overload" );
Console.WriteLine("pre-processing" );
Init(Int32.Parse(s));
Console.WriteLine("post-processing" );
}
private void Init(int i)
{
Console.WriteLine("int ctor {0}", i);
}
}
EDIT : Selon les commentaires sur le message original, il s'agit d'une question C#.
Réponse courte : oui, en utilisant le this
mot-clé.
Longue réponse : oui, en utilisant le this
mot-clé, et voici un exemple.
class MyClass
{
private object someData;
public MyClass(object data)
{
this.someData = data;
}
public MyClass() : this(new object())
{
// Calls the previous constructor with a new object,
// setting someData to that object
}
}
En C#, il n'est pas possible d'appeler un autre constructeur à l'intérieur du corps de la méthode. Vous pouvez appeler un constructeur de base de la manière suivante : foo(args):base() comme vous l'avez souligné vous-même. Vous pouvez également appeler un autre constructeur dans la même classe : foo(args):this().
Lorsque vous voulez faire quelque chose avant d'appeler un constructeur de base, il semble que la construction de la classe de base dépende de certaines choses externes. Si c'est le cas, vous devez utiliser les arguments du constructeur de base, et non pas définir les propriétés de la classe de base ou quelque chose comme ça.