une - surcharge constructeur c#




Appelez un constructeur d'un autre (5)

Avant le corps du constructeur, utilisez:

: base (parameters)

: this (parameters)

Exemple:

public class People: User
{
   public People (int EmpID) : base (EmpID)
   {
      // Add more statements here.
   }
}

J'ai deux constructeurs qui fournissent des valeurs aux champs en lecture seule.

class Sample
{
    public Sample(string theIntAsString)
    {
        int i = int.Parse(theIntAsString);

        _intField = i;
    }

    public Sample(int theInt)
    {
        _intField = theInt;
    }


    public int IntProperty
    {
        get { return _intField; }
    }
    private readonly int _intField;

}

Un constructeur reçoit les valeurs directement et l'autre effectue un calcul et obtient les valeurs, puis définit les champs.

Maintenant, voici la capture:

  1. Je ne veux pas dupliquer le code de réglage. Dans ce cas, un seul champ est défini, mais il peut bien sûr y en avoir plus d'un.
  2. Pour rendre les champs en lecture seule, je dois les définir à partir du constructeur, donc je ne peux pas "extraire" le code partagé à une fonction d'utilité.
  3. Je ne sais pas comment appeler un constructeur d'un autre.

Des idées?


Comme ça:

public Sample(string str) : this(int.Parse(str)) {
}

Lorsque vous héritez d'une classe d'une classe de base, vous pouvez appeler le constructeur de la classe de base en instanciant la classe dérivée

class samle {
    public int x;

    public sample(int value) {
        x = value;
    }
}

class der : public sample {
    public:
        int a;
        int b;

        public der(int value1,int value2) : base(50) {
            a = value1;
            b = value2;
        }

        class run {
            public static void main(String[] args){
                der obj = new der(10,20);
                Console.WriteLine(obj.x);
                Console.WriteLine(obj.a);
                Console.WriteLine(obj.b);
            }
        }

La sortie du programme est

50 10 20

Vous pouvez également utiliser ce mot-clé pour appeler un constructeur d'un autre constructeur

class samle {
    public int x;

    public sample(int value) {
        x = value;
    }

    public sample(sample obj):this(obj.x) {
    }
}

class run{
    public static void main(String[] args) {
        sample s = new sample(20);
        sample ss = new sample(s);
        Console.WriteLine(ss.x);
    }
}

La sortie est 20.


Oui, vous pouvez appeler une autre méthode avant la base d'appel ou celle-ci!

public class MyException : Exception
{
    public MyException(int number) : base(ConvertToString(number)) 
    {
    }

    private static string ConvertToString(int number) 
    { 
      return number.toString()
    }

}

Voici un exemple qui appelle un autre constructeur, puis vérifie la propriété qu'il a définie.

    public SomeClass(int i)
    {
        I = i;
    }

    public SomeClass(SomeOtherClass soc)
        : this(soc.J)
    {
        if (I==0)
        {
            I = DoSomethingHere();
        }
    }




constructor