Je veux appeler constructeur à l'intérieur de la classe comme: Classe publique MyClass () {
public MyClass(){ //...... } public MyClass(int id):this(){ //...... } private void Reset(){ //..... this = new MyClass(id); //here I want to call constructor //...... } }
5 Réponses :
Non, cela n'est pas possible. Vous ne pouvez pas attribuer à cela.
Vous pouvez cependant laisser réinitialiser () code> renvoyer une nouvelle instance de
myClass code> afin que le code de l'appelant puisse dire: p>
public class MyClass
{
public MyClass Reset()
{
return new MyClass();
}
}
MyClass c = new MyClass();
c = c.Reset();
J'aime l'idée de réinitialiser () renvoyer une nouvelle instance, dans ce cas devrait probablement être statique code>.
Si une nouvelle instance a été renvoyée, cela ne réinitialise plus rien. Cela renvoie une instance fraîchement créée de la classe. Genre de trompeur.
True, peut-être créer () code> serait un meilleur nom de méthode.
@JamesMichaelhare - Sauf si vous créez une usine d'objet, vous devriez vraiment utiliser de nouvelles ... ce qui rend cette suggestion un peu redondante.
réponse simple: vous ne pouvez pas.
Réponse légèrement plus compliquée: déplacez votre logique d'initialisation dans une méthode distincte pouvant être appelée à partir du constructeur et de votre réinitialiser () code> méthode: p>
Ceci est parfaitement succinct et clair et a aidé ma propre compréhension immensément.
vous peut em> appelez un constructeur pour votre classe à l'intérieur de votre classe (en fait cela se fait souvent avec des méthodes d'usine): mais vous ne pouvez pas changer La valeur du Cette référence code> à l'intérieur de la classe. Vous devez plutôt avoir votre méthode "Réinitialiser ()" Définissez les champs à leurs valeurs par défaut. P> p>
Vous ne pouvez pas. Mais ce que vous pouviez faire est de scinder la logique du constructeur en une méthode d'initialisation que la réinitialisation pourrait appeler.
public MyClass(){ //...... } public MyClass(int id):this(){ Initialize(id); } private void Initialize(int id){ //.... } private void Reset(){ //..... Initialize(id); //...... } }
Dans une classe, vous ne pouvez pas réaffecter ceci code> (bien qu'il soit à noter que dans une structure, c'est parfaitement légal). La question, cependant, est de savoir si vous devriez em>. Je suppose que votre objectif est de définir toutes les valeurs de champ à un état spécifique, de sorte que d'autres personnes ont déjà dit que vous puissiez avoir votre méthode de réinitialisation renvoyer une nouvelle instance ou vous pouvez séduire votre logique dans une méthode claire () et appelez-la. à la place. P>
Pourquoi voudriez-vous faire cela? Vous ne pouvez pas modifier le bouton code> CE code> de cette manière à l'intérieur d'une méthode d'instance, ni de votre choix.