Looking for c# Answers? Try Ask4KnowledgeBase
Looking for c# Keywords? Try Ask4Keywords

C# LanguageTipo de valor vs tipo de referencia


Sintaxis

  • Pasando por referencia: public void Double (ref int numberToDouble) {}

Observaciones

Introducción

Tipos de valor

Los tipos de valor son los más simples de los dos. Los tipos de valor se utilizan a menudo para representar los datos en sí. Un entero, un booleano o un punto en el espacio 3D son ejemplos de tipos de buen valor.

Los tipos de valor (estructuras) se declaran utilizando la palabra clave struct. Consulte la sección de sintaxis para ver un ejemplo de cómo declarar una nueva estructura.

En términos generales, tenemos 2 palabras clave que se utilizan para declarar tipos de valor:

  • Estructuras
  • Enumeraciones

Tipos de referencia

Los tipos de referencia son un poco más complejos. Los tipos de referencia son objetos tradicionales en el sentido de programación orientada a objetos. Por lo tanto, admiten la herencia (y los beneficios de la misma) y también admiten los finalizadores.

En C # generalmente tenemos estos tipos de referencia:

  • Las clases
  • Delegados
  • Interfaces

Los nuevos tipos de referencia (clases) se declaran usando la palabra clave class. Para ver un ejemplo, consulte la sección de sintaxis para saber cómo declarar un nuevo tipo de referencia.

Grandes diferencias

Las principales diferencias entre los tipos de referencia y los tipos de valor se pueden ver a continuación.

Los tipos de valor existen en la pila, los tipos de referencia existen en el montón

Esta es la diferencia que se menciona a menudo entre los dos, pero en realidad, a lo que se reduce es que cuando se usa un tipo de valor en C #, como un int, el programa usará esa variable para referirse directamente a ese valor. Si dice que int mine = 0, entonces la variable mine se refiere directamente a 0, lo cual es eficiente. Sin embargo, los tipos de referencia realmente mantienen (como sugiere su nombre) una referencia al objeto subyacente, esto es similar a los punteros en otros lenguajes como C ++.

Puede que no note los efectos de esto inmediatamente, pero los efectos están ahí, son poderosos y sutiles. Consulte el ejemplo sobre cómo cambiar los tipos de referencia en otro lugar para ver un ejemplo.

Esta diferencia es la razón principal de las siguientes diferencias y vale la pena conocerla.

Los tipos de valor no cambian cuando los cambia en un método, los tipos de referencia sí cambian

Cuando se pasa un tipo de valor a un método como un parámetro, si el método cambia el valor de alguna manera, el valor no se cambia. Por el contrario, pasar un tipo de referencia a ese mismo método y cambiarlo cambiará el objeto subyacente, de modo que otras cosas que usen ese mismo objeto tendrán el objeto recién cambiado en lugar de su valor original.

Vea el ejemplo de los tipos de valor frente a los tipos de referencia en los métodos para obtener más información.

¿Qué pasa si quiero cambiarlos?

Simplemente páselos a su método usando la palabra clave "ref", y luego está pasando este objeto por referencia. Es decir, es el mismo objeto en la memoria. Así que las modificaciones que hagas serán respetadas. Ver el ejemplo en pasar por referencia para un ejemplo.

Los tipos de valor no pueden ser nulos, los tipos de referencia pueden

Casi como dice, puede asignar nulo a un tipo de referencia, lo que significa que la variable que ha asignado no puede tener ningún objeto real asignado. En el caso de los tipos de valor, sin embargo, esto no es posible. Sin embargo, puede usar Nullable para permitir que su tipo de valor sea anulable, si este es un requisito, aunque si esto es algo que está considerando, piense con firmeza si una clase podría no ser el mejor enfoque aquí, si es el suyo. tipo.

Tipo de valor vs tipo de referencia Ejemplos relacionados