Destruccion de objeto

14/09/2005 - 10:49 por Pedro Rivera | Informe spam
Hace poco escribi esto:
¿Como puedo forzar la destruccion de un objeto desde el
mismo objeto? Algo como esto:
public class Clase
{
public Clase()
{
this=null; //Esto funciona en Visual Basic, per
// no funciona en C#
}
}

Y el buen Octavio Hernandez, a quien agradezco sus respuestas por mas
simples que sean mis dudas, me contesto esto:

Pedro,
¿Para qué necesitas esta clase de "suicidio" :-)
No es nada común que esta necesidad se presente, yo diría que tienes algún
fallo en el diseño.

Tienes razon Octavio. Esto yo suelo hacerlo mediante una variable privada
global de tipo bool que sea verdadera si un parametro pasado al constructor
es correcto, y falso si el parametro es incorrecto (me falto poner eso de los
parametros, hasta ahora me doy cuenta), despues las funciones de la clase
leen el valor de la variable y se ejecutan solo si el valor es verdadero. Lo
que sucede es que me han dicho que mediante Reflection se puede conocer el
valor de una variable, aunque esta sea privada, y cambiarlo, por lo que
prefiero destruir el objeto, si es posible.

Aprovecho para hacer tres preguntas:

1.- ¿Se puede destruir el objeto?

2.- Si en verdad es posible y no me mintio quien me lo dijo, ¿Como se accede
a un miembro o metodo privado de una clase? Un ejemplo, profavor, porque yo
no lo he conseguido.

3.- Tengo un archivo que lo vierto en una variable string. Despues recorro
cada caracter de la cadena mediante un ciclo "for( int i=0;
i<cadena.Length;i++)". El metodo Length devuelve un valor "int", que segun un
libro de "Walter Savitch" tiene un rango de "-2,147, 483,647 hasta 2,147,
483,647 bytes". El archivo contiene solo numeros y letras, y me he fijado que
cada caracter ocupa un byte. Hice que la "cadena" tuviera el triple de
caracteres que los permitidos pero nada raro paso. El ciclo se recorrio
normalmente y el archivo se guardo y se leyo completo.
¿Alguien sabe a que se debe esto? No quisiera que la aplicacion funcionara y
fallara al momento de ser instalada.

Saludos y gracias.
 

Leer las respuestas

#1 Eduardo A. Morcillo [MS MVP VB]
15/09/2005 - 05:50 | Informe spam
1.- ¿Se puede destruir el objeto?



Desde dentro del mismo objeto no puedes. Simplemente porque accediste a el
desde una referencia externa a el y mientras esta exista esa referencia el
objeto no puede ser eliminado por el GC.

2.- Si en verdad es posible y no me mintio quien me lo dijo, ¿Como se
accede a un miembro o metodo privado de una clase? Un ejemplo,
profavor, porque yo no lo he conseguido.



// cambiando el valor de un campo llamado variable
// de la clase MiClase
Type t = typeof(MiClase);
FieldInfo fi = t.GetField("variable", BindingFlags.NonPublic |
BindingFlags.Instance);
fi.SetValue(obj, "abc");

3.-



Esta pregunta no llego a entenderla :(

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo
http://mvp.support.microsoft.com/pr...4EF5A4191C

Preguntas similares