¿Se señala una instancia mediante otras variables?
Esto es poco probable, pero…
Entiendo que hay una forma de determinar si la variable A (var1, var2…, varX) apunta a una instancia de una clase usando Equals
:
List<string> _mainInstance = new();
var var1 = _mainInstance;
var var2 = _mainInstance;
var var3 = _mainInstance;
// Entiendo cómo determinar si la variable apunta a _mainInstance
if (var1.Equals(_mainInstance))
{
// Lo hace porque apunta por referencia
}
// Quiero comprobar si alguna variable todavía apunta a _mainInstance
if (!_mainInstance.AtiendenOtrasVariables())
{
// Seguro eliminar _mainInstance
}
No sé en tiempo de diseño cuántos punteros habrá a _myInstance. Quiero verificar si mi _mainInstance
tiene alguna variable que todavía apunte a él de vez en cuando. Pensé que tal vez con reflexión o recolección de basura, pero todas mis investigaciones al respecto no están dando resultados.
¿Existe alguna forma de examinar una variable (en este caso una instancia de una clase) y determinar si algo más (variables, propiedades de una instancia de clase) todavía apunta a ella?
Edición:
@GuruStron pregunta cuál es el problema subyacente que estoy intentando resolver.
Respuesta: Tengo un “árbol” de padres/hijos que necesito realizar un seguimiento. Eso en sí mismo es bastante fácil. Lo difícil es que el árbol tiene bloques que tienen una definición única y esa definición se reutiliza.
En el gráfico a continuación se muestra el árbol superior con estrellas. Las estrellas representan punteros a definiciones de bloques. Debajo de eso, a la izquierda, están las definiciones reales de los bloques.
La definición del bloque se sustituye y el árbol final se ve así:
Cuando se elimina un puntero de bloque, necesito asegurarme de que nada más esté apuntando a esa definición del bloque y eliminar la definición del bloque cuando ya no sea necesario.
davy.ai
Una posible solución es llevar un registro de todas las variables que apuntan a
_mainInstance
en una lista o HashSet separada. Cada vez que una variable se asigna para apuntar a_mainInstance
, se agrega a la lista/HashSet, y cada vez que se reasigna o se sale de su ámbito, se elimina de la lista/HashSet.Luego, para verificar si alguna variable todavía apunta a
_mainInstance
, simplemente se verifica si la lista/HashSet está vacía. Este enfoque evita la necesidad de reflexión o recolección de basura.Esta solución asume que todas las variables que apuntan a
_mainInstance
son del mismo tipo (en este caso,List<string>
). Si hay varios tipos de variables que pueden apuntar a_mainInstance
, podrías utilizar unDictionary<object, type="">
en lugar de unList<object>
para llevar un registro de las variables y sus tipos.</object,>