Domanda

Se ho ottenuto

Dim myRect As Rectangle = New Rectangle(0,0,100,100)

È necessarie o semplicemente bene di farlo entro la fine:

myRect = Nothing

O non è necessario? Grazie.

se è necessario, ci sono altri casi non è per le mie variabili?

È stato utile?

Soluzione

In generale, come Joel ha detto , è inutile.

Nel tuo esempio specifico, anche se, in realtà è inutile . Rectangle è un tipo di valore , quindi impostazione a Nothing non è anche interessano conteggio di riferimento di un oggetto; è l'assegnazione di un nuovo valore di (il valore predefinito per Rectangle) per la variabile myRect. Questo è analogo ad avere una variabile Integer e impostandola 0 alla fine di un metodo. non ti comprare nulla.


Vorrei sottolineare che l'affermazione "Impostazione qualsiasi variabile per Nothing [o null in C #] non compie nulla" * è un mito. E 'del tutto possibile che si può avere una campo in una classe che si potrebbe anche impostare per null se l'oggetto di riferimento non è più necessaria, ma avete ancora un riferimento all'istanza classe stessa.

Come esempio semplicistico, si supponga di avere un po 'di classe contenitore che avvolge una matrice T[], e vi darà il contenitore di un metodo Empty. Potrebbe avere senso per impostare array interno del contenitore a null in questo metodo, che porterebbe a Zero riferimenti all'oggetto matrice, qualificazione per la raccolta dei rifiuti. (Si potrebbe quindi creare un nuovo array quando il codice esterno ha provato accanto ad aggiungere un T alla collezione.) Se non si imposta il campo a NULL in Empty, allora ci sarebbe ancora un riferimento alla matrice (vale a dire, il campo) , e in modo che sarebbe una piccola quantità di memoria utilizzata che davvero non hanno bisogno.

Come ho detto, questo è un esempio semplicistico. E onestamente, è raro che mai necessario prendere in considerazione gli scenari del genere. Ho solo pensato che vorrei menzionare in modo che non si ottiene l'impressione errata che l'impostazione di un campo per Nothing letteralmente non compie nulla.

* Non sto in realtà citando chiunque specifico qui; questo è solo un eccesso di generalizzazione ho sentito affermato più di una volta.

Altri suggerimenti

Non fatelo. Questo è stato importante da fare nei giorni VB6, ma per .Net è possibile (anche se molto improbabile) per poter gettare in realtà il garbage collector off e avere altri effetti collaterali imprevisti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top