Domanda

In considerazione questa classe:

public class Foo
{
    public Int32 MyField;
}

immagino il membro "MyField" non è in pila filo perché come potrebbe essere raggiunto da più fili, deve essere definitivamente nella memoria dinamica, ma non vuol dire che è inscatolato e ogni unboxed viene utilizzato?

Grazie in anticipo

È stato utile?

Soluzione

No, non è inscatolato ogni volta che viene utilizzato. Boxe si verifica solo quando si è costringere un tipo di valore in un tipo di riferimento - non ha davvero nulla a che fare con cui è stata assegnata la memoria effettiva per il valore (o anche se è stata allocata la memoria).

Nel vostro caso, è il modo di agire sul MyField che determinerà se è inscatolato, non come Foo è trattato.

  //No Boxing
  var f = new Foo();
  f.MyField = 5;
  int val = f.MyField;


  //Boxing
  var f = new Foo();
  f.MyFIeld = 5;
  object val = f.MyField;

Si noti che nel secondo esempio val ora contiene un riferimento a un int scatolato. MyField è ancora (e rimarrà sempre) un int unboxed e può accedere senza unboxing (grazie per indicare il chiarimento necessaria, LukeH )

Altri suggerimenti

No, il tipo di valore non viene inscatolato.

inscatolamento verifica solo quando si utilizza un tipo di valore come se fosse un oggetto, ad esempio quando si memorizza un int in una matrice di object. Cioè:

object[] a = new object[10];
int x = 1;
a[0] = x;

In questo caso, il tipo di valore è inscatolato.

Ma un tipo di valore memorizzato come un campo all'interno di una classe non è inscatolato.

n, boxe si verifica solo quando un tipo di valore viene considerato come uno System.Object (solitamente da colata implicito, cioè passando come parametro metodo)

I tipi di valore solo ottenere inscatolato quando sono assegnati a una variabile di tipo di riferimento (ad esempio object). Se MyField mai assegnare a qualcosa di diverso da un int o un'altra struttura per cui può essere cast (per esempio double), non sarà mai essere inscatolati.

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