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
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)