Mi az értelme a this. Name = name; és this. Age = age; soroknak az alábbi programrészben? A futás során a "lajos" értéket miért nem veszi fel?
class Person
{
public string name = "lajos";
public int age = 5;
public Person(string name, int age)
{
this.name = name;
this.age = age;
}
}
class Program
{
static void Main(string[] args)
{
Person d = new Person("Ferenc", 2);
}
}
}
Mi az értelme?
Értékadás egy konstruktorban.
OOP 1. lecke.
A "lajos"-is felveszi példányosításkor, csak rögtön utána felülírod "Ferenc"-cel.
Aminek inkább nincs értelme az ez:
public string name = "lajos";
public int age = 5;
Teljesen random default értékek, ráadásul nincs is paraméter nélküli konstruktor.
A sima Name az osztájon belüli érték(lajos),
a konstruktorban a name példányszintű változó egyenlővé teszed az argumentumban megadott változóval, de mivel mind a kettő neve ugyanaz ezért kell a this hogy megkülönböztesd.
Ez a konstruktor is ugyanúgy működik, csak nem kell benne a this kulcsszót használni:
public Person(string Kukutyin, int AgeOfEmpires)
{
name = Kukutyin;
age = AgeOfEmpires;
}
}
Kezdj el olvasni valami OOP tanagyagot.
Enkapszuláció.
Az a lényege, hogy innentől kezdve a két változót egy objektumban egységben tudod kezelni.
A lényege pontosan az, hogy inicializálod vele az objektumodban levő adattagokat. Amikor az osztályból példányosítasz egy objektumot default (paraméterek nélküli) konstruktorral (ami jelen esetben mondjuk nincs), akkor az objektumodban a name "lajos", az age pedig 5 lenne. Mivel ezek vannak beállítva default értékeknek. Ha viszont a fent látható konstruktorral hozod létre az objektumot, akkor az azzal a névvel, és korral fog rendelkezni, amit ott argumentumként megadsz.
Aminek itt nincs túlzottan sok értelme, az esetleg a "lajos" és az 5 mint default értékek. Azon velül, hogy ad-hoc baromságnak tűnnek, nem is kerülnek soha igazán beállításra. Mivel egyetlen konstruktorod van, ami éppenséggel mindkettő értékét beállítja, így lényegében sosem hozol létre olyan objektumot, ahol ezek a default értékek jönnek létre. Azt hiszem. őszintén szólva nem tudom, mi történik (lehet-e egyáltalán ilyet csinálni) akkor, ha nem hívsz konstruktort (tehát new Person(x,y); helyett csak new Person; )
Nyilván az OOP lényege akkor jön elő, ha nem egy osztályról van szó, amit egyszer példányosítasz. Ha több Person-t hozol létre akkor már láthatóvá válik a dolog lényege.
Az említett alábbi részt hogy hívjuk? osztályváltozó?
public string name = "lajos";
public int age = 5;
és itt a Ferenc paraméter vagy példányváltozónak mondjuk?
Person d = new Person("Ferenc", 2);
}
}
}
Osztályon belüli függvényeket metódusnak szokás hívni, a sima 'változókat' pedig adattagnak.
Példányosításnál meg paramétert szoktunk mondani, esetleg kezdőérték.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!