se Tipi di valore e tipo di riferimento sono da tipo di oggetto che è un tipo di riferimento, allora come tipo di valore è di tipo valore e il tipo di riferimento è di riferimento quando vengono tutti dal tipo di riferimento e.Valore Tipo Vs Tipo di riferimento - Oggetto Classe C#
7
A
risposta
12
Sostanzialmente, si tratta di un imbroglio ;-p
Qualunque struct
(ossia gli elementi ereditato da ValueType
) viene trattata con tipo valore semantica. Ma c'è una conversione di boxe a object
se necessario; il che significa che se lanci un struct
su un object
, verrà creato un oggetto speciale (sull'heap gestito) contenente i dati (come un clone) dal tuo valore *.
La versione in scatola è un riferimento di tipo. È possibile annullare l'estrazione di questo (mediante il cast) alla versione struct
, che inverte questo (copia i dati dei cloni dall'oggetto sull'heap nel valore locale).
* = meno che non sia un vuoto Nullable<T>
, quali box null
; allo stesso modo, null
unboxes a un vuoto Nullable<T>
.
Problemi correlati
- 1. Sistema di tipo Python - Oggetto vs tipo
- 2. Cosa passare? Oggetto di riferimento o tipo di valore?
- 3. Confronto tipo oggetto C#
- 4. Java Double vs double: tipo classe vs tipo primitivo
- 5. C tipo di riferimento # Passaggio direttamente vs parametro out
- 6. Python: terminologia 'classe' VS 'tipo'
- 7. Memorizza un riferimento a un tipo di valore?
- 8. Passando oggetto functor per valore vs per riferimento (C++)
- 9. Quando è utile un tipo di valore/vincolo di tipo di riferimento in C#?
- 10. Errori di tipo "classe" C++
- 11. Controllo NSPredicate per tipo di classe oggetto
- 12. tipo/valore non corrispondente a template C++ dichiarazione di classe
- 13. Un tipo può essere un tipo di riferimento e un tipo di valore allo stesso tempo?
- 14. Tipo cancellazione: Java vs C#
- 15. C++ 11 Cancella il tipo di classe?
- 16. C++ - istanza modello con tipo di riferimento
- 17. Tipo di oggetto di inoltro in C#
- 18. non ha classe tipo C++
- 19. Comportamento di oggetto C++ Riferimento
- 20. fare riferimento al tipo di oggetto nella definizione dell'oggetto
- 21. associazione di riferimento a un valore di tipo drops qualificatori
- 22. semantica del tipo di ritorno di riferimento valore-r?
- 23. L'oggetto è un tipo di riferimento o un tipo di valore?
- 24. Tipo di oggetto in array di riferimento e Java
- 25. Perché una "classe tipo" chiamata "tipo classe"?
- 26. domanda riguardo al valore di tipo/di riferimento di eventi
- 27. Come riferimento di tipo classe corrente utilizzando farmaci generici
- 28. Tipo di classe C++ come argomento
- 29. Classe di riferimento C++ gestita
- 30. Parametri di tipo multiplo in classe tipo?
Potete spiegarmi o indicare un collegamento su come sta avvenendo la magia (imbroglio)? Ad esempio, Struct è un tipo di valore mentre il tipo di riferimento oggetto – skjagini
@skjagini - semplicemente, il compilatore e il runtime possono individuare facilmente che qualcosa è derivato da "ValueType" e trattarlo in modo diverso ... Oltre a questo? ECMA335 –
+1 Anche se linguaggi come C# pretendono che una struttura in scatola sia un tipo di valore, all'interno del budello del CLR ogni tipo di valore gestito ha un tipo di classe corrispondente che incapsula un campo del tipo di valore corrispondente e racchiude tutti i membri in quelli di quel campo. Anche se le specifiche del linguaggio C# chiamano una cosa del genere un tipo di valore, si comportano come un tipo di riferimento. – supercat