c# summary - Llama a un constructor de otro.




4 Answers

Me gusta esto:

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

Tengo dos constructores que alimentan valores a los campos de solo lectura.

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 constructor recibe los valores directamente, y el otro realiza algún cálculo y obtiene los valores, luego establece los campos.

Ahora aquí está la trampa:

  1. No quiero duplicar el código de configuración. En este caso, solo se establece un campo pero, por supuesto, puede haber más de uno.
  2. Para que los campos sean de solo lectura, debo establecerlos desde el constructor, por lo que no puedo "extraer" el código compartido a una función de utilidad.
  3. No sé cómo llamar a un constructor de otro.

¿Algunas ideas?




Antes del cuerpo del constructor, use:

: base (parameters)

: this (parameters)

Ejemplo:

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



Aquí hay un ejemplo que llama a otro constructor, luego verifica la propiedad que ha establecido.

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

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



Cuando hereda una clase de una clase base, puede invocar el constructor de la clase base creando una instancia de la clase derivada

class sample
{
    public int x;

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

class der : sample
{
    public int a;
    public 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);

        System.Console.WriteLine(obj.x);
        System.Console.WriteLine(obj.a);
        System.Console.WriteLine(obj.b);
    }
}

La salida del programa de ejemplo es

50 10 20

También puede usar this palabra clave para invocar un constructor de otro constructor

class sample
{
    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);

        System.Console.WriteLine(ss.x);
    }
}

La salida de este programa de ejemplo es

20




Related

c# constructor