Zwierzeta z = new Zwierzeta("kot", "kuna");
Powyższy nowy egzemplarz „z”
w konstruktorze otrzymuje 2 wartości: „kot” oraz „kuna”.
Po skompilowaniu powyższego programu otrzymamy następujące
wyniki:

Jak już wiemy, struktury są typami skalarnymi. Oznacza to po
prostu, że gdy przekazuje się je do funkcji, to przekazuje się je poprzez
wartość. W powyższym kodzie obiekt „z” przekazywany jest do metody: MojaMetoda() poprzez właśnie wartość
(obiekt „z” jest przecież typu struktury Zwierzeta).
W metodzie tej składowym: Zwierzak1
oraz Zwierzak2 przypisywana jest nowa
wartość, która zostaje następnie wyświetlona („Moje ulubione zwierzaki to: pies
oraz gołąb”). Jednak po powrocie do metody Main() w klasie głównej i ponownym
wywołaniu metody WriteLine() na obiekcie „z” możemy zauważyć, że wartości te
nie zostały zmienione na stałe („Nie jest fajny: kot oraz kuna”). Efekt mamy
pożądany, ale dlaczego właśnie w taki sposób go otrzymaliśmy? Odpowiedź jest
prosta: struktura została przekazana jako typ skalarny, dlatego też metoda MojaMetoda() operuje na kopiach a nie na
oryginalnych obiektach.
Spróbujmy teraz sprawdzić powyższą tezę i zamiast
inicjalizacji struktury utwórzmy klasę Zwierzeta.
Nasz program będzie wyglądał w następujący sposób:
public class Zwierzeta
{
private string zwierzak1;
private string zwierzak2;
public
Zwierzeta(string zwierzak1, string zwierzak2)
{
this.zwierzak1
= zwierzak1;
this.zwierzak2
= zwierzak2;
}
public string Zwierzak1
{
get { return zwierzak1; }
set {
zwierzak1 = value; }
}
public string Zwierzak2
{
get { return
zwierzak2; }
set {
zwierzak2 = value; }
}
public override string ToString()
{
return (String.Format("{0} oraz {1}", zwierzak1, zwierzak2));
}
}
public class MojeZwierzeta
{
public void MojaMetoda(Zwierzeta
z)
{
z.Zwierzak1 = "pies";
z.Zwierzak2 = "gołąb";
System.Console.WriteLine("Moje ulubione zwierzaki to: {0}.", z);
}
}
class Glowna
{
static void Main()
{
Zwierzeta
z = new Zwierzeta("kot", "kuna");
System.Console.WriteLine("Nie lubię takich zwierzaków jak: {0}.",
z);
MojeZwierzeta
mz = new MojeZwierzeta();
mz.MojaMetoda(z);
System.Console.WriteLine("Nie jest fajny: {0}.", z);
}
}
Gdy teraz uruchomimy powyższy program, to otrzymamy inne
wyniki niż poprzednio: