Quote Originariamente inviata da escocat Visualizza il messaggio
Ecco è questo che non mi entra in testa. Intanto il riferimento si intende alla struttura o all'oggetto istanziato mediante quella struttura?
Ovviamente all'oggetto; se un oggetto non è più raggiungibile allora si può eliminare, indipendentemente dal fatto che esistano altre variabili di quel tipo.
Cos'è per la precisione un "riferimento a SphHWorld"?
Qualunque variabile di un reference type (=qualunque variabile di tipo classe; sono esclusi i tipi primitivi e le struct, che invece sono dei "value type"). Se hai un minimo di dimestichezza con C o C++, tutte le variabili di tipi "by reference" sono in realtà dei puntatori; se nessun puntatore punta più ad una certa istanza, questa può essere eliminata (quando gli gira al garbage collector).
Anche quando l'oggetto k di tipo SphHWorld viene eliminato, tutto il programma è costellato di riferimenti a questo oggetto e a questa struttura.
Se ci sono altri riferimenti che puntano al medesimo oggetto, allora ovviamente non viene eliminato (dato che è ancora utilizzato altrove); se invece ci sono altre variabili di tipo SphHWorld che puntano ad altre istanze non ha alcuna rilevanza.
Non mi è chiaro....si parla di riferimenti in esecuzione del programma o riferimenti possibili che sono presenti nel programma ma non eseguiti?
Di riferimenti esistenti, cosa importa ai fini della cancellazione di una certa istanza che ci possono essere dei riferimenti ad altre istanze? Il garbage collector concettualmente fa una cosa molto semplice - se una certa istanza non è più utilizzata (=non c'è più nessuna variabile che punta ad essa) la elimina.

In ogni caso, dovresti ripassarti un po' il tuo libro di C#, value type/reference type, GC e compagnia sono abbastanza i fondamentali del linguaggio...