Sto imparando C# da uno sfondo Java e ho avuto una certa confusione su ValueType
s. La mia comprensione dalla lettura della panoramica di MSDN C# vs Java era che le primitive sono oggetti invece di avere wrapper. Se questo è il caso, perché hanno bisogno di essere boxed per chiamare i metodi? Sembra che significhi qualcosa di diverso rispetto al boxing automatico di Java, ma non sono sicuro di cosa. Sembra più un casting.Qual è il significato di "Boxing" in C# (al contrario di Java)?
6
A
risposta
10
La boxe è un concetto molto simile in Java e C#. La differenza è quando succede:
Character ch = 'a';
questo farà sì che la boxe in Java, perché 'a' è primitiva e caratteristica è di classe (involucro). In C# questo:
Char ch = 'a';
non causerà la boxe perché Char
non è un tipo primitivo, ma è il valore-tipo di classe. Per causare il pugilato in C# è necessario eseguire il cast dell'oggetto di valore sul riferimento object
.
object o = 'a';
Edit: Come già detto da HighCore in commento, v'è un'importante implicazione del meccanismo di boxe in C#. L'inserimento di materiale in List<int>
non causa il pugilato e l'estrazione di materiale non provoca il disimballaggio perché l'elenco di ints è un elenco reale di inbox unboxed.
Problemi correlati
- 1. Qual è il significato di "==" in C?
- 2. Qual è il contrario di incapsulamento?
- 3. Qual è il contrario di "è"?
- 4. Il thread Java MessageFormat è sicuro? (al contrario di SimpleDateFormat)
- 5. Qual è il significato di (int &) di conversione in C++
- 6. Qual è il significato di `_t` di` size_t` in C?
- 7. Qual è il contrario di string.next?
- 8. Qual è il significato di char zero (0) in Java?
- 9. Qual è il significato di ∃?
- 10. C memcpy al contrario
- 11. Qual è il significato di "wild pointer" in C?
- 12. Qual è il significato di #line in linguaggio C?
- 13. Qual è il significato di void * * volatili in C++
- 14. Qual è il significato di "_" in python?
- 15. Qual è il significato di [...] in python?
- 16. Qual è il significato di @_ in Perl?
- 17. Qual è la differenza tra Boxing e AutoBoxing in Java?
- 18. Qual è il significato di 'sourceSets.all *'
- 19. Qual è il significato di id?
- 20. Qual è il significato di CTOR?
- 21. Qual è il significato di $ in un nome di variabile?
- 22. Qual è il significato di questa sintassi?
- 23. Qual è il significato di questo C++ Errore std :: length_error
- 24. qual è il significato di questa macro C?
- 25. Qual è il contrario di Math Power (**) in Ruby?
- 26. Qual è il contrario di Array # reject in ruby?
- 27. Qual è il contrario di escape, in javascript?
- 28. Qual è il significato di questa macro C++?
- 29. Qual è il significato di -532459699?
- 30. Qual è il significato di svg: svg?
Penso che sia anche importante menzionare a un nuovo arrivato da java, che i generici di C# sono progettati correttamente e non esiste nulla come "cancellazione di tipo" e altri abomini a cui potrebbe essere abituato da java, e che creare un elenco 'è totalmente valido in C#. –