Osztály leszármaztatás Protected, private, public, base stb. kulcsszavak
Osztályok és konstruktorok Osztályok létrehozása és példányosítás, Származtatott osztály létrehozása és példányosítás
Osztály definiálása Class kulcsszóval Amikor példányosítunk, először a konstruktor fut le mint metódus Ha nem definiálunk konstruktort akkor is létezik, ha definiálunk, az új lesz érvényes Először az ősosztály konstruktora fut le
Ősosztály, származtatott osztály A származtatott osztály örökli az ősosztály metódusait és tagváltozóit Először az ősosztály majd az alosztály konstruktora fut le A gyerek objektum éhes is lesz és alszik is. ősosztály származtatott osztály
Jancsika objektum (példányosítás) Főprogramban gyerek osztály példányosítása
Paraméteres konstruktor használata Ha paraméteres az ősosztály konstruktora, akkor a paramétert származtatni kell az öröklött osztályban, azaz nem térhet el a két konstruktor szintaktikája Konstruktor(paraméterek) = konstruktor(paraméterek) Őszosztály konstruktora Leszármazott osztály konstruktora gyerekek jancsika=new gyerekek("Tóth János");
Védelmi szintek Private Protected Public Internal
Public kulcsszó Más osztályokból láthatóak az ilyen függvények és tagváltozók.
Private kulcsszó Csakis az osztályon belül elérhető – ahol deklarálták . Akkor használjuk általában, ha nem akarjuk, hogy egy más osztályból közvetlenül módosítani tudjanak egy property-t például vagy kiolvasni az értékét. Pl. az ember alszik állapotát nem akarom, hogy közvetlenül írják a főprogramból mint osztályból: Pl: objektum.alszik=true; Ezért elrejtem, és csak egy cselekvés módosíthatja ugyanazon osztályból.
Private kulcsszó Folytatva az előző példát definiálok egy tagváltozót privát módon és elrejtem a külső osztályok számára. Ha befolyásolni akarják a változó értékeit, használniuk kell a felébreszt, elaltat metódusokat. Kiolvasáshoz az allapotkiolvas() metódust kell használniuk. public class emberek { private bool alszik=true; public void altat() { this.alszik=true; } public void felebreszt() { this.alszik=false; } } class Program { public static void Main(string[] args) { emberek x=new emberek(); x.altat(); x.felebreszt(); Console.WriteLine(this.allapotkiolvas()); }
Private és Protected kulcsszó Ha a gyerekek alosztályából akarom elérni a privát változót akkor az nem fog menni, se külső osztályból. Az alsó ábrán a gyerek alosztály konstruktorából hívom meg a felébreszt() metódust. Kívülről ugyebár nem látható, így az objektumon majd nem tudom meghívni. Ha ez a metódus private lenne, akkor szintén nem érném el az alosztályból, csak az emberek ősosztályból. Hát ezért egy megoldás maradt, hogy kívülről ne legyen látható, de alosztályból elérhető legyen: protected szó használata a felebreszt() metóduson, amit az ábrán nem látunk, de így lett létrehozva az ősosztályban a metódus.
Hol a hiba? Keresd meg ha van, gépi segítség nélkül !
1. példa public class emberek { public string név=""; private void nagybetűsít() { this.név=this.név.ToUpper(); } public emberek(string _név) { this.név=_név; this.nagybetűsít(); } } public class gyerekek:emberek { public gyerekek(string _név):base(_név) { this.nagybetűsít(); } } class Program { public static void Main(string[] args) { gyerekek jancsika=new gyerekek("Tóth János"); emberek felnott=new emberek("Nagy Aladár"); }