Estoy tratando de diseñar una clase que pueda actualizar una referencia a un objeto (fuera de la clase) en la destrucción.Almacenando una referencia en C#
Así que esencialmente usted crea una instancia de este objeto y le pasa un tipo de referencia (de cualquier manera, constructor, etc.) y luego en la destrucción del objeto la referencia original ha cambiado a una referencia creada por el objeto.
Si paso una referencia por referencia (digamos en construcción) no puedo encontrar la forma de almacenar esta referencia (como referencia) para que el destructor la actualice? Por ejemplo (pseudo):
class Updater
{
object privateReference;
public Updater(ref object externalReference)
{
privateReference = externalReference; //is privateReference now a new reference to the original object?
}
~Updater()
{
privateReference = new object(); //therefore this isn't 'repointing' the externalReference
}
}
La clave aquí es que no estoy tratando de mutar el objeto original 'externo' de esta clase que estoy tratando de 're-apuntar', o inicializar que si se quiere .
Si está destruyendo su objeto, ¿por qué 'volver a marcar' un campo interno que también se destruirá? – Oded
im no tratando de volver a marcar el campo interno, ese es el punto. Estoy tratando de volver a señalar lo que señala ... si eso tiene sentido. –
Nunca es legal crear un campo (o cualquier otro almacenamiento basado en heap, como un elemento de matriz) que almacena una referencia a una variable. El motivo es que la referencia podría ser una referencia a una variable local en la pila cuya vida útil es más corta que el almacenamiento que contiene la referencia, por lo que la ref no es válida. Podemos (1) hacer refs inseguros y quebradizos, como C++, o (2) restringir el almacenamiento de refs y mantener a los ref siempre seguros, o (3) nunca almacenar cosas en la pila. Elegimos (2). –