Respuesta
La matriz en C# es de tipo referencial, por lo que no es necesario el uso del boxeo. sin embargo tendrá el boxeo en este ejemplo:
var i = 123;
object o = i;
Asumiendo que esto es C# (var
y C# -como la sintaxis de matrices), no, no se i
en caja. Solo los tipos de valores primitivos (piense en valores numéricos) pueden encasillarse.
Los valores de la matriz tampoco están encuadrados, ya que los valores de las matrices primitivas no aparecen encuadrados.
Puedes guardar cualquier estructura, incluidas las que escribes tú mismo, así que el boxeo es un poco más de largo alcance de lo que esto implica. Los tipos de valor se implementan en .NET como estructuras. – Donnie
No hay nada que guardar. La palabra clave var no significa que la variable esté en formato boxx. No realiza ninguna conversión durante el tiempo de ejecución. La palabra clave var es estrictamente una construcción C#. Lo que está sucediendo cuando se utiliza var es:
var i = new int[1];
IL ve como:
int[] i = new int[1]
Ahora bien, si usted está preguntando si cuando se asigna un entero a una parte de la matriz de i lo hace caja ? No
i[0] = 2;
no lo hace:
como.
Esto se opone a las que no:
var o = new object[1];
o[0] = 2;
Este ejemplo y por qué utilizar ArrayList (piense matriz expansible) en 1.0, 1.1 (genéricos pre) fue un enorme costo. El siguiente comentario se aplica al ejemplo object[]
así:
Cualquier tipo de referencia o valor que es añade a un ArrayList es implícitamente upcast a objeto. Si los elementos son tipos de valor , se deben incluir cuando se haya agregado a la lista y se haya eliminado cuando se recupere . Tanto la fundición como las operaciones de boxeo y desembalaje degradan el rendimiento; el efecto de boxeo y unboxing puede ser bastante significativo en los casos en que itere en colecciones grandes.
Boxing sólo se produce cuando una (es decir, un tipo primitivo, struct o enumeración) value type está siendo tratado como un tipo de referencia. Su matriz está declarada para contener valores del tipo int
. El var
keyword simplemente le dice al compilador que infiera el tipo de variable i
, en lugar de tener que especificarlo manualmente.
te hicieron por escrito:
var i = new object[2];
El compilador que se traduciría a object[] i = new object[2]
, y cualquier int
valores que poner ahí estaría en caja. Cualquier tipo de referencia que pongas en la misma matriz no necesitaría ningún boxeo.
En resumen, var
no tiene nada que ver con el boxeo.
Aquí hay diagram of different types en .NET. También es posible que desee leer .NET Type fundamentals.
- 1. Boxeo vs Unboxing
- 2. ¿Boxeo y unboxing también está lanzando?
- 3. Java automático de boxeo/unboxing wierdness
- 4. .NET boxeo/unboxing vs rendimiento de conversión
- 5. boxeo y unboxing, ¿por qué las salidas no son "System.Object"?
- 6. ¿Por qué algunos idiomas necesitan Boxeo y Unboxing?
- 7. Boxeo y desembalaje: ¿cuándo aparece?
- 8. ¿Cuál es la diferencia entre el boxeo/unboxing y el tipo de lanzamiento?
- 9. Valores Unboxing Tipos de objetos
- 10. ¿Estos ejemplos de boxeo/desempaquetado
- 11. Enum boxeo y la Igualdad
- 12. Las estructuras, interfaces y boxeo
- 13. Ampliación y boxeo con java
- 14. En WPF do DependencyProperty causa un montón de boxeo/unboxing cuando se usa con tipos de valor?
- 15. ¿Qué es boxeo y desembalaje y cuáles son las compensaciones?
- 16. Unboxing no crea una copia del valor. ¿Es esto correcto?
- 17. unboxing, (dispersas) matrices y biblioteca de vectores haskell
- 18. Unboxing automático de Java: ¿hay una advertencia del compilador?
- 19. ¿Todos los moldes de C# resultan en boxeo/desempaquetado?
- 20. tema Java con var-args y el boxeo
- 21. ¿Por qué falla el autoboxing/unboxing aquí?
- 22. unboxing usando la biblioteca ASM Java
- 23. auto-unboxing en Scala patrón-partido
- 24. ¿Cómo se reconoce el boxeo/desempaquetado en un código Scala descompuesto?
- 25. de boxeo en estructuras al llamar ToString()
- 26. .NET: comportamiento extraño de double.Equals() cuando boxeo
- 27. (Un) matrices primitivas de boxeo en Java
- 28. Hacer autoboxing y unboxing se comportan de manera diferente en Java y C#
- 29. ¿El boxeo crea basura en .NET?
- 30. Autoboxing versus boxeo manual en Java
¿Qué idioma? DO#? – kennytm
En lenguaje C#. – Vivek
@MarkRushakoff :) Sé que esta es una publicación anterior, pero me reí de ganas, en realidad derramé un poco de café :))) –