C# osztályöröklés base használata?
class Animal
{
protected string allatkert;
public Animal(string _allatkert)
{
allatkert = _allatkert;
}
}
class Dog : Animal
{
private int marMagassag, suly;
private string nev;
public Dog(string _allatkert, int _marMagassag, string _nev, int _suly)
: base(_allatkert)
{
marMagassag = _marMagassag; nev = _nev; suly = _suly;
}
}
Csak annyi kódot másoltam ki amivel kapcsolatban lennének a kérdéseim.
Eddig megvan, hogy a Dog megkapja a "string allatkert" változót
DE a Dog konstruktoránál miért van a : base(_allatkert) ? és mi van ha többet örököl akkor : base(_allatkert, xy) ?? vagy mi ez a szabály hogy a kapott paraméterek után teszünk egy kettőspontot, majd base?
Itt van a main-beni példányosítás:
Dog Kutya = new Dog("ANIMAL ZOO", 58, "LASSIE", 35);
és a másik kérdés, hogy tudom elérni, a Kutya állatkertjét GET-terrel?
Nincs szó semmilyen szabályról.
: base(_allatkert)
Ez meghívja az ősosztály konstruktorát az _allatkert paraméterrel, hogy eltárolja az értékét.
Eltárolhatná saját maga is, de sokkal szebb az ős konstruktorát meghívni, ami megteszi ezt.
A Get-terrel nem tudom mi a gond, ugyanúgy tudod elérni, mint bármilyen más változót.
public string Állatkert { get {return allatkert; } }
Sok segítség volt hogy a : base( ) <- az az ősosztály konstruktorát hívja meg ez így már érthető.
public string Allatkert
{
get { return allatkert; }
set { allatkert = value; }
}
de ezt most beírhatom az Animal és a Dog osztályba is mind2 jó, de melyikbe célszerű?
Mivel allatkart változója már az állatnak is van, nyilván oda.
Egyébként elég hülye példa, kutyák mióta vannak állatkertben? :)
Ha az állatkert a Marson van, why not? :D
Amire te csodálkozva néztél az elején, azt inicializátornak hívják, Nem tudom pontosan C#-ban miket tud, de C++ nyelven lehetőséged van inicializációs listában megadni az egyes adattagok kezdőértékét mielőtt egyáltalán elindulna a konstruktor lefutása, illetve lehetőséged van másik konstruktort meghívni vele, legyen az ősosztályé, vagy annak az osztálynak egy másik konstruktora (constructor delegation). C#-ban azt hiszem csak ősosztály konstruktorhívását lehet felülírni vele, azon kívül nem sokra használható. Mindenesetre azt fontos megjegyezni, hogy ha nem írsz ilyen inicializátort, az azzal ekvivalens, mintha egy : base() állna ott.
"Eltárolhatná saját maga is, de sokkal szebb az ős konstruktorát meghívni, ami megteszi ezt."
Nekem úgy rémlik, ha megírtál egy konstruktort, már nem lesz legenerálva a default, úgyhogy az így nem működne. (?)
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!