Constructores

06/02/2007 - 10:34 por miquel | Informe spam
Hola, tengo una clase así:

class A
{
private A a;
private int c;
private string s;

A(int C) //constructor 1
{
c = C;
a = (A)this.MemberWiseClone();
}

A(int C, string S) : this(C) //constructor 2
{
s = S;
A.S = C;
}

public string S {set {s = value;}}
}

Lo que quiero es almacenar en "a" (private A a) una copia del objeto una
vez construido.
Pero la clase tiene 2 constructores o mas. Hay alguna forma de asegurarse de
que algo se ejecuta despues de llamar a cualquiera de los contructores?
En el ejemplo, se trataria de asegurarse de que a =
(A)this.MemberWiseClone(); se ejecutara como última instrucción de cualquier
de los constructores.
Idealmente seria que el constructor 2 fuera:

A(int C, string S)
{
s = S;
} : this(C); (pero esto, claro, no funciona)

Gracias.
 

Leer las respuestas

#1 Guillermo guille
06/02/2007 - 14:19 | Informe spam
¿Y que más te da de que se haga al principio? En vez de hacer una copia con
MemberwiseClone, simplemente asignale la referencia a this, de esa forma,
podrás acceder siempre a los datos, aunque los asignes después.
Que quieres manipular la clase de forma independiente, pues haces la copia
(implementando un método Clone).

Aunque supongo que tu idea es mantener una copia "inalterada" de la clase
una vez iniciada...
En ese caso, "tienes que trabajar", je, je, es decir, añadir al final de
cada constructor la asignación a esa copia "superflua" de la clase... creo
que no hay otra forma de hacerlo.

Nos vemos
Guillermo
Microsoft MVP de Visual Basic desde 1997
http://www.elguille.info


"miquel" wrote in message
news:
Hola, tengo una clase así:

class A
{
private A a;
private int c;
private string s;

A(int C) //constructor 1
{
c = C;
a = (A)this.MemberWiseClone();
}

A(int C, string S) : this(C) //constructor 2
{
s = S;
A.S = C;
}

public string S {set {s = value;}}
}

Lo que quiero es almacenar en "a" (private A a) una copia del objeto una
vez construido.
Pero la clase tiene 2 constructores o mas. Hay alguna forma de asegurarse
de que algo se ejecuta despues de llamar a cualquiera de los contructores?
En el ejemplo, se trataria de asegurarse de que a =
(A)this.MemberWiseClone(); se ejecutara como última instrucción de
cualquier de los constructores.
Idealmente seria que el constructor 2 fuera:

A(int C, string S)
{
s = S;
} : this(C); (pero esto, claro, no funciona)

Gracias.

Preguntas similares