# C# in the Nutshell: Dziedziczenie ## Dziedziczenie Dziedziczenie polega na tym, że klasa dziedzicząca posiada wszystkie właściwości i metody klasy, z której dziedziczy (za wyjątkiem specjalnie określonych). ```csharp= class Enemy: Character { } ``` Powyższy zapis oznacza, że klasa `Enemy` dziedziczy od klasy `Character`. ## Słowo kluczowe `virtual` Oznacza to, że kod szuka implementacji w klasie dziedziczącej, później w klasie bazowej. ```csharp= public virtual Hit() { } ``` Dla przykładu: ```csharp= class Character { public virtual void Hit() { Console.WriteLine("Character hit()"); } } class Enemy : Character { public override void Hit() { Console.WriteLine("Enemy hit()"); } } // w funkcji main: Character character = new Enemy(); character.Hit(); // na konsoli wyświetli się "Enemy hit" ``` ## Słowo kluczowe `override` ```csharp= class Enemy : Character { public override void Hit() { } } ``` To słowo kluczowe oznacza, że metoda `Hit()` w klasie `Enemy` nadpisuje tak samo nazwaną metodę z klasy `Character`. ## Słowo kluczowe `out` To słowo oznacza, że poza wartością zwracaną przez funkcję, możemy jeszcze zwrócić jakąś wartość poprzez dany parametr. \ Dla przykładu: ```csharp= int selection; while(!int.TryParse(Console.ReadLine(), out selection)){ } Console.WriteLine(selection); ``` Powyższy kod oznacza, że funkcje `int.TryParse()` zwraca wartość nie tylko poprzez `return`, ale też poprzez parametr `selection` #### `int.TryParse(Console.ReadLine(), out parametr)` Ta funkcja "próbuje" przekształcić dane z konsoli na typ int i zwraca, czy jej się to udało. Ta funkcja występuje także dla typów innych niż int. ## Pętla `for` ```csharp= for (int i = 0; i < aliveEnemies.Count; i++) { aliveEnemies[i].Introduce(); } ``` Powyższy fragment kodu można zapisać w równoważny sposób za pomocą pętli `while`: ```csharp= int i = 0; while(i < aliveEnemies.Count) { aliveEnemies[i].Introduce(); i++; } ``` ## Parametr opcjonalny ```csharp= protected void Hit(bool isSpecialAbility = false) { } ``` Parametr `isSpecialAbility` jest parametrem opcjonalnym, co oznacza, że jeśli nie zostanie podany przy wywołaniu funkcji, to jego wartość zostanie ustawiona na domyślną, w tym wypadku false. ### Słowo kluczowe `protected` To słowo kluczowe oznacza, że dana metoda/właściwość jest dostępna dla danej klasy i klas po niej dziedziczących, ale nie jest dostępna z zewnątrz (dla klas niedziedziczących zachowuje się tak samo jak `private`). ###### tags: `.Net PG` `C#` `dziedziczenie`