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 el evalution realizado en el private
constructor, un poco, vamos a ver por qué ordenamiento constructor 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 a 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 de public
(solo para usar la visibilidad como el identificador).
Eso fue muy fácil ... ¡gracias! –