Sobes.tech
Junior — Middle

Koji procesi i posledice nastaju kada se objekat prenese u funkciju ili metodu u programiranju?

sobes.tech АИ

Одговор од АИ

U C#-u, prilikom prosleđivanja objekta funkciji ili metodi, prosleđuje se kopija reference na taj objekat, a ne sam objekat. To znači da unutar metode možete menjati stanje objekta (njegova polja i svojstva), i te promene će biti vidljive izvan metode, jer referenca ukazuje na isti objekat u memoriji.

Međutim, ako unutar metode dodelite parametru novu referencu (npr., param = new Object()), to neće uticati na originalnu referencu izvan metode, jer se kopija reference menja lokalno.

Primer:

class Person {
    public string Name;
}

void ChangeName(Person p) {
    p.Name = "Иван"; // promeniće ime objekta
    p = new Person(); // lokalno će promeniti referencu, ali izvan metode to neće imati efekta
    p.Name = "Пётр";
}

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

Dakle, prosleđivanje objekta je prosleđivanje reference po vrednosti. Promene stanja objekta ostaju, ali preusmeravanje reference — ne.