Saltar al contenido

Los tipos y su encajonamiento y desencajonamiento

Esta sección muestra el efecto que tienen los dos tipos cuando los pasas.

Tipo de valor por valor

Tomemos el siguiente código como ejemplo.

Los tipos y su encajonamiento y desencajonamiento
Los tipos y su encajonamiento y desencajonamiento
12345678910111213141516171819202122232425 usando el Sistema;namespace PassingAround{clase públicaPVTBV{estaticvoidMagic(int a,int b,int c){ a = b * c; b = a * c; c = a * b; Consola. WriteLine($"Dentro de la magia valor a: {a}, b: {b}, c: {c}");}staticvoidMain(String[] args){int a =10;int b =20;int c =30; Consola. WriteLine($"Valor original a: {a}, b: {b}, c: {c}");Magic(a, b, c); Console.WriteLine($"Después del valor mágico a: {a}, b: {b}, c: {c}"); Console.Read();}}

csharp

El resultado es el siguiente.

123Valor original a: 10, b: 20, c: 30Valor mágico interior a: 600, b: 18000, c: 10800000Después del valor mágico a: 10, b: 20, c: 30

bash

La idea de pasar estas variables es mostrar la propiedad del tipo de valor del tipo de datos. Esto significa que pasar cualquier variable de tipo valor y modificar el valor sólo afectará a la variable local en el ámbito dado a la que se pasó el valor, Durante el tiempo de compilación hubo realmente 6 reservas de variables en la aplicación que tenemos, 3 en la función principal , y 3 en la función mágica . Cuando se llamó a la Mágica se copiaron los valores de las variables a , b y c . Luego se realizaron los cálculos y se ejecutó la sentencia WriteLine . No hubo modificaciones en las variables originales.

Tipo de referencia por valor

Tomemos el siguiente código como ejemplo.

1234567891011121314151617181920212223242526272829303132 usando el sistema;namespace PassingAround{classReader{publicint age;publicstring platform ="";}publicclassPRTBV{staticvoidoneYearLater(Reader a){Consola. WriteLine("El tiempo vuela..."); a.age +=1;}estaticvoidMain(String[] args){Lector r1 =newReader();Reader r2 =newReader(); r1.age =30; r2.age =50; Consola. WriteLine($"La edad es {r1.age}, plataforma favorita: {r1.platform}"); Console.WriteLine($"La edad es {r2.age}, plataforma favorita: {r2.platform}");oneYearLater(r1);oneYearLater(r2); Console. WriteLine($"La edad es {r1.age}, plataforma favorita: {r1.platform}"); Console.WriteLine($"La edad es {r2.age}, plataforma favorita: {r2.platform}"); Console.Read();}}

csharp

El resultado es el siguiente.

123456La edad es 30, plataforma favorita: La edad es 50, plataforma favorita: El tiempo vuela... El tiempo vuela... La edad es 31, plataforma favorita: La edad es 51, plataforma favorita: 

bash

Esto tiene éxito porque, en lo que respecta a la modificación de la edad , la clase pertenece al tipo de referencia .. Cuando llamamos a la función oneYearLater , se pasó el puntero y el valor original señalado por el puntero para el atributo age de la instancia específica se incrementó en uno. Esto debería dar una buena idea de la principal diferencia entre los tipos de referencia y el valor de .