studio - tipos por valor y por referencia c#
.NET: son valores de diccionario almacenados por referencia o valor (4)
El Dictionary
contará una copia del valor de la clave que le pasaste. No sería posible para ella, o cualquier otra colección / contenedor, almacenar una referencia a cualquier valor, ya que es posible que el contenedor sobreviva a la variable que intentó almacenar en él. Ahora, como han dicho otros, si el tipo del valor es un tipo de referencia, el valor de la variable es solo una referencia, por lo que solo está almacenando una copia de la referencia a la variable. Si el tipo del valor del diccionario es un tipo de valor, entonces se copiará el valor real.
Tengo un Dictionary<int, Product>
. Si se agrega el mismo Producto a más de una clave, ¿se almacena una nueva instancia de ese objeto para cada clave? ¿O simplemente una referencia al objeto original?
Esta colección es muy grande y cada producto tendrá entre 1 y 10 claves. Mi principal preocupación es la asignación de memoria.
Los tipos de referencia se almacenan siempre como referencias. nadie va a adivinar qué lógica de "clonación" pretendes para tu tipo. Si necesita copias, tendrá que crearlas por su cuenta antes de colocarlas en contenedores, pasar a otras funciones, etc.
los tipos de valor se copian (de manera simplista, se crea una copia de representación de bytes, sin embargo, todos los valores de referencia seguirán siendo referencias), a menos que se pasen como ref a las funciones. Para los contenedores aunque sean copias. a menos que cree un envoltorio de tipo de referencia para ellos.
No, debería usar la misma referencia al objeto original.
Sin embargo, no estoy completamente seguro de cómo se comportará si el Diccionario se serializa / deserializa.
Si el Producto es un tipo de referencia (clase y no estructura), solo se almacenará una referencia.