Sobes.tech
Junior — Middle

Quais processos e consequências ocorrem quando um objeto é passado para uma função ou método na programação?

sobes.tech IA

Resposta da IA

Em C#, ao passar um objeto para uma função ou método, é passada uma cópia da referência a esse objeto, não o próprio objeto. Isso significa que, dentro do método, é possível alterar o estado do objeto (seus campos e propriedades), e essas alterações serão visíveis fora do método, pois a referência aponta para o mesmo objeto na memória.

No entanto, se dentro do método for atribuída uma nova referência ao parâmetro (por exemplo, param = new Object()), isso não afetará a referência original fora do método, pois a cópia da referência é alterada localmente.

Exemplo:

class Person {
    public string Name;
}

void ChangeName(Person p) {
    p.Name = "Иван"; // irá alterar o nome do objeto
    p = new Person(); // irá alterar localmente a referência, mas não afetará fora do método
    p.Name = "Пётр";
}

Person person = new Person { Name = "Алексей" };
ChangeName(person);
Console.WriteLine(person.Name); // Vai imprimir "Иван"

Portanto, passar um objeto é passar a referência por valor. As alterações no estado do objeto permanecem, mas a reatribuição da referência não.