Así es como funciona. Las cadenas son un tipo de referencia: su variable A es una referencia (como un puntero) a una cadena en el montón, y usted está copiando el valor del puntero (la dirección de la cadena) en la variable B.
Su ejemplo no cambia el valor de A cuando asigna "abcd" a B porque las cadenas se tratan especialmente en .net. Son inmutables, como señala Kevin, pero también es importante tener en cuenta que tienen semántica de tipo de valor, es decir, las asignaciones siempre dan como resultado que la referencia apunte a una nueva cadena, y no cambia el valor de la cadena existente almacenada en La variable.
Si, en lugar de cadenas, que utiliza (por ejemplo) los coches, y cambia una propiedad, que vería este es el caso:
public class Car {
public String Color { get; set; }
}
Car A = new Car { Color = "Red" };
Car B = A;
B.Color = "Blue";
Console.WriteLine(A.Color); // Prints "Blue"
// What you are doing with the strings in your example is the equivalent of:
Car C = A;
C = new Car { Color = "Black" };
Es probablemente la pena señalar que no funciona de esta manera para tipos de valores (enteros, dobles, flotantes, largos, decimales, booleanos, estructuras, etc.). Esos se copian por valor, a menos que estén enmarcados como Object
.
posible duplicado de http://stackoverflow.com/questions/1219664/c-sharp-reference-type-assignment-vs-value-type-assignment –
@Tudor Creo que está esperando el valor de " abcd "para ser asignado a A. –
@Chris Sí, soy – Marin