Como: Saber a diferença entre uma Struct de passagem e passar uma referência de classe a um método (guia de programação translation from VPE for Csharp)

Este exemplo mostra que, quando um struct é passado para um método, uma cópia da estrutura é passada, mas quando um classe instância é passada, uma referência é passada.

A saída do exemplo a seguir mostra que apenas o valor do campo classe é alterado quando a instância da classe é passada para o ClassTaker método. Campo struct, no entanto, não é alterado, passando a instância para o StructTaker método. Isso ocorre porque uma cópia da estrutura é passada para o StructTaker método, enquanto uma referência à classe é passada para o ClassTaker método.

Exemplo

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
*/

Consulte também

Conceitos

Guia de Programação C#

Referência

Classes (guia de programação C#) 

Structs (guia de programação C#)

Passando parâmetros (guia de programação translation from VPE for Csharp)