Compartir a través de


Cómo: Saber las diferencias entre pasar a un método una estructura y una referencia a clase (Guía de programación de C#)

Actualización: noviembre 2007

Este ejemplo muestra que cuando una estructura se pasa a un método, lo que se pasa realmente es una copia de la estructura; sin embargo, cuando se pasa una instancia de una clase, lo que se pasa es una referencia.

El resultado del siguiente ejemplo muestra que, cuando se pasa la instancia de clase al método ClassTaker, sólo cambia el valor del campo de la clase. Sin embargo, el campo de una estructura no cambia al pasar su instancia al método StructTaker. Esto es debido a que lo que se pasa al método StructTaker es una copia de la estructura mientras que lo que se pasa al método ClassTaker es una referencia a la clase.

Ejemplo

class TheClass
{
    public string willIChange;
}

struct TheStruct
{
    public string willIChange;
}

class TestClassAndStruct
{
    static void ClassTaker(TheClass c)
    {
        c.willIChange = "Changed";
    }

    static void StructTaker(TheStruct s)
    {
        s.willIChange = "Changed";
    }

    static void Main()
    {
        TheClass testClass = new TheClass();
        TheStruct testStruct = new TheStruct();

        testClass.willIChange = "Not Changed";
        testStruct.willIChange = "Not Changed";

        ClassTaker(testClass);
        StructTaker(testStruct);

        Console.WriteLine("Class field = {0}", testClass.willIChange);
        Console.WriteLine("Struct field = {0}", testStruct.willIChange);

        // Keep the console window open in debug mode.
        Console.WriteLine("Press any key to exit.");
        Console.ReadKey();
    }
}
/* Output:
    Class field = Changed
    Struct field = Not Changed
*/

Vea también

Conceptos

Guía de programación de C#

Referencia

Clases (Guía de programación de C#)

Estructuras (Guía de programación de C#)

Pasar parámetros (Guía de programación de C#)