metodo - llamar a una clase desde un formulario en c#
Llamando al constructor desde otro constructor en la misma clase (3)
Agregar :this(required params)
al final del constructor para hacer ''encadenamiento de constructores''
public Test( bool a, int b, string c )
: this( a, b )
{
this.m_C = c;
}
public Test( bool a, int b, float d )
: this( a, b )
{
this.m_D = d;
}
private Test( bool a, int b )
{
this.m_A = a;
this.m_B = b;
}
Fuente Cortesía de csharp411.com
Tengo una clase con 2 constructores:
public class Lens
{
public Lens(string parameter1)
{
//blabla
}
public Lens(string parameter1, string parameter2)
{
// want to call constructor with 1 param here..
}
}
Quiero llamar al primer constructor desde el segundo. ¿Es esto posible en C #?
El orden de evaluación del constructor también debe tenerse en cuenta al encadenar constructores:
Para tomar prestado de la respuesta de Gishu, un poco (para mantener el código algo similar):
public Test(bool a, int b, string c)
: this(a, b)
{
this.C = c;
}
private Test(bool a, int b)
{
this.A = a;
this.B = b;
}
Si cambiamos ligeramente la evaluación realizada en el constructor private
, veremos por qué el orden de los constructores es importante:
private Test(bool a, int b)
{
// ... remember that this is called by the public constructor
// with `this(...`
if (hasValue(this.C))
{
// ...
}
this.A = a;
this.B = b;
}
Arriba, he agregado una llamada de función falsa que determina si la propiedad C
tiene un valor. A primera vista, podría parecer que C
tendría un valor: está establecido en el constructor que llama; Sin embargo, es importante recordar que los constructores son funciones.
this(a, b)
se llama - y debe "devolver" - antes de que se realice el cuerpo del constructor public
. Dicho de otra manera, el último constructor llamado es el primer constructor evaluado. En este caso, private
se evalúa antes que public
(solo para usar la visibilidad como identificador).
Sí, usarías lo siguiente
public class Lens
{
public Lens(string parameter1)
{
//blabla
}
public Lens(string parameter1, string parameter2) : this(parameter1)
{
}
}