Kezdőoldal » Számítástechnika » Programozás » C# osztályöröklés base használ...

C# osztályöröklés base használata?

Figyelt kérdés

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?



2016. máj. 29. 21:19
 1/5 anonim ***** válasza:

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; } }

2016. máj. 29. 21:30
Hasznos számodra ez a válasz?
 2/5 A kérdező kommentje:

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ű?

2016. máj. 29. 21:50
 3/5 anonim ***** válasza:

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? :)

2016. máj. 29. 22:06
Hasznos számodra ez a válasz?
 4/5 anonim ***** válasza:

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.

2016. máj. 30. 02:47
Hasznos számodra ez a válasz?
 5/5 anonim ***** válasza:

"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. (?)

2016. máj. 30. 17:40
Hasznos számodra ez a válasz?

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!