ŚciągaCzęść NR.23Kurs dobiegł końca. Przyszedł czas na podsumowanie jego zawartości w pigułce. W sumie w tym kursie chciałem napisać jeszcze o innych rzeczach jak: indeksery , tworzenie własnych kolekcji od <T> czy jak efektywnie korzystać z innych słów kluczowych. Kurs jednak zrobił się za długi i nawet jego nazwa “obiektowość” nie jest do końca już trafna.
Na początku chciałem omówić podstawowe zagadnienia, jak interfejsy i klasy abstrakcyjne, ale w zapale pisania omówiłem również zagadnienia, które niekoniecznie pasują do obiektowości.
Postanowiłem też przeskanować wpisy z tego kursu, ponieważ piszę bloga od 4 miesięcy i błędy się zdarzają, choćby z braku doświadczenia. Szkoda ,że mimo iż wiele osób je czyta nikt mi tych małych błędów nie wykaże. No cóż, dla potrzeb lepszego bloga na razie zostawię nowe wpisy w spokoju. A tak serio to naprawdę chciałbym ruszyć do przodu, mam już trochę tego dosyć. Mam tyle projektów w tyle na tym blogu. Nikt jednak nie mówił ,że będzie to łatwe. Zapomniałem też o tym ,że zmieniłem trochę styl bloga ,więc muszę teraz sprawdzić każdym wpis na blogu. Jeśli przeczytałeś ten kurs od początku do końca to gratuluje ponieważ w 90% omówiłem tutaj najważniejsze zagadnienia języka C#. A i mnie się przyda to małe odświeżenie wiedzy. Rozumiem ,że może się wydawać ,że ta wiedza jest nieprzydatna. Znajomość tych zagadnień bardziej się opłaca niż wiedza o: WPF ,ASP.NET czy Silverlight-a. Tak jak powiedziałem wcześniej czas na wielkie podsumowanie.
Oto lista jak napisać “X” w C#".
01 : Klasy i obiekty
Zadanie | Wykonanie: |
Deklarowanie klasy | Napisz słowo kluczowe class, potem napisz nazwę klasy, a później nawiasy klamrowe. Wewnątrz nawiasów deklarujesz pola, właściwości i metody tej właśnie klasy. |
Deklarowanie konstruktora | Napisz metodę, której nazwa jest taka sama jak nazwa klasy. Metoda ta nic nie zwraca, nawet void. |
Wywołanie konstruktora | Używając słowa kluczowego “new” wywołujesz konstruktor wraz z odpowiednimi parametrami. |
02 : Klasa statyczna i anonimowa
Zadanie | Wykonanie: |
Deklarowanie statycznej klasy | Użyj słowa ‘static’ przed słowem ‘class’. Klasa statyczna może mieć tylko pola i metody statyczne. |
Deklarowanie statycznej metody | Napisz słowo ‘static’ przed deklaracją metody. |
Wywołanie statycznej metody | Napisz nazwę klasy po czym postaw kropkę i napisz nazwę metody. Statyczna metoda nie potrzebuje zainicjowanego obiektu. |
Deklarowanie pola statycznego | Ponowne użycie słowa ‘static’ przed deklaracją pola: |
Deklarowanie stałych pól | Napisz słowo kluczowe ‘const’ przed deklaracją pola. Nie trzeba pisać słowa ‘static’ ponieważ pole to już jest statyczne. |
Dostęp do stałych pól | Użycie pola stałego wygląda identycznie jak użycia pola statecznego. |
Statyczny konstruktor | Statyczny konstruktor wywołuje się w trakcie uruchomienia programu. Może on operować tylko na stałych polach. Rzadko się z niego korzysta. |
Tworzenie anonimowej klasy | Klasy anonimowe spełniają cele w wyrażeniach LINQ. Nie mają one nazwy. Klasy anonimowe mogą posiadać tylko pola publiczne .Wszystkie te pola muszą być zainicjowane . Żadne pola nie mogą być statyczne. Nie mogą zawierać metod. var AnonimowyObiekt = new { Name = "Zdzisław", age = "23" }; |
03 : Typ referencyjny typ wartościowy i pamięć
04 : Wartości Null i typy Nullable
Zadanie | Wykonanie: |
Deklarowanie zmiennej , która przetrzymuje również wartość null | Zadeklaruj zmienną i dodaj modyfikator ‘?’ po typie bez spacji. |
Jak sprawdzić czy zmienna nullable ma jakąś wartość. | |
05 : REF OUT Przekazywanie parametrów dla metody
Zadanie | Wykonanie: |
Przekaż argument jako parametr ref | Przed argumentem użyj słowa ‘ref’. To sprawia ,że parametr jest traktowany jak alias do prawdziwego argumentu więc nie operuje na jego kopii. Metoda, jeśli zmieni ten parametr to zmiana dotyczy też faktycznego argumentu. |
Przekaż argument jako parametr out | Przed argumentem użyj słowa‘out’. To sprawia ,że parametr jest tak jak w poprzednim przypadku traktowany, jak alias. Metoda musi przypisać parametrowi ‘out’ jakąś wartość. Argument nie może mieć przypisanej wartości przed umieszczeniem jej do metody. |
06 : System.Object boxing i unboxing, rzutowanie
Zadanie | Wykonanie: |
Pakowanie wartości | Zainicjuj albo przypis zmienną do typu object. |
Wypakowywanie wartości | Wykonaj rzutowanie na referencji obiektu, która ma zapakowaną wartość danego typu. |
Wykonaj bezpieczne rzutowanie | Do wyboru są dwa słowa kluczowe ‘is’i‘as’. Operator ‘is’ sprawdza czy dany obiekt może być rzutowany na dany typ. Operator ‘as’ wywołuje rzutowanie. Jeśli rzutowanie się nie powiodło rezultat jest pusty (null) |
07 : Typ wyliczeniowy
Zadanie | Wykonanie: |
Zadeklarowanie typu wyliczeniowego | Napisz słowo kluczowe ‘enum’ potem jego nazwę ,później w nawiasach klamrowych zadeklaruj listę wartości tego typu wyliczeniowego. |
Zadeklarowanie zmiennej typu wyliczeniowego | Tak jak z deklaracją innych zmiennych trzeba napisać typ przed nazwą zmiennej. |
Przypisanie wartość | Napisz nazwę typu wartościowego po czym po kropce wybierz wartość, którą chcesz przypisać. |
08 : Struktura i Klasa różnice
Zadanie | Wykonanie: |
Deklarowanie struktury | Tutaj pojawia się słowo kluczowe ‘struct’ . Analogicznie do deklaracji klasy potem musisz napisać nazwę struktury ,a później jej ciało w nawiasach klamrowych. |
Deklarowanie struktury | Napisz nazwę typu struktury po czym napis nazwę zmiennej. |
Inicjowanie zmiennej struktury i nadanie jej wartości | Wywołaj konstruktor struktury aby ją zainicjować. Chociaż struktura może być używana bez niego, ale nie jest to zalecane. |
09 : Tablice
Zadanie | Wykonanie: |
Deklarowanie zmiennej tablicy | Napisz nazwę typu po czym bez spacji dodaj do tego typu nawiasy kwadratowe. Teraz standardowo napisz nazwę swojej zmiennej. |
Tworzenie instancji tablicy | Napisz słowo kluczowe "new", potem typ tablicy ,a później określ jej rozmiar w nawiasach kwadratowych. |
Tworzenie instancji tablicy z gotowymi wartościami | Aby zadeklarować listę gotowych wartości w tablicy wystarczy użyć nawiasu klamrowego w ten sposób. |
Znaleźć liczbę elementów w tablicy | Do określenia liczby elementów w tablicy używaj właściwości Length . |
Uzyskaj dostęp do pojedynczego elementu w tablicy. | Napisz nazwę tablicy po czym w nawiasach kwadratowych napisz liczbę całkowitą, która reprezentuje indeks elementu w tablicy. W C# tablice zaczynają się od zera nie od jedynki. |
Wykonaj iteracje przez wszystkie elementy w tablicy | Do wyboru jest pętla for albo pętla foreach. |
Zadeklaruj i użyj tablicy wielowymiarowej | |
10 : Kolekcje klas System.Collections
Zadanie | Wykonanie: |
Zadeklaruj klasę z System.Collection i dodaj do niej jeden element. | |
11 : Dziedziczenie
Zadanie | Wykonanie: |
Stwórz klasę pochodną, która dziedziczy po klasie bazowej | W czasie deklaracji klasy dziedziczącej po jej nazwie użyj dwukropka i nazwy klasy bazowej. |
Wywołaj konstruktor z klasy bazowej jako część konstruktora klasy dziedziczącej | Używając słowa kluczowego 'base' jesteś w stanie wywołać konstruktor klasy pochodnej. W tym przypadku najpierw wykona się konstruktor klasy bazowej ,a potem klasy pochodnej. |
12 : Metody i dziedziczenie
Zadanie | Wykonanie: |
Deklarowanie metody wirtualnej | Użyj słowa ‘virtual’do deklaracji tej metody. |
Zadeklaruj metodę, która z klasy pochodnej nadpisuje odziedziczoną metodę virutualną | Użyj słowa ‘override’ aby napisać metodę z klasy bazowej. |
Wywołaj metodę z klasy bazowej w klasie pochodnej. | Użyj słowa kluczowego base. |
13 : Interfejsy Explicite vs Implicit
Zadanie | Wykonanie: |
Deklarowanie interfejsu | Użyj słowa kluczowego ‘interface’. |
14 : Klasa abstrakcyjna, Metoda abstrakcyjna, Zamknięta klasa
Zadanie | Wykonanie: |
Stwórz klasę abstrakcyjną, która może być użyta jako klasa bazowa. Zawiera ona też metody abstrakcyjne. | Zadeklaruj klasę ze słowem kluczowym ‘abstract’. Metoda abstrakcyjna nie posiada ciała można powiedzieć ,że spełnia ona taki sam cel jak metoda w interfejsie. |
Stwórz klasę zamkniętą, która nie może być użyta jako klasa bazowa. | Zadeklaruj klasę ze słowem kluczowym ‘sealed’. |
Napisz zamkniętą metodę i wykaż kolejność działań słów kluczowych w metodach. | |
15 : Właściwości
Zadanie | Wykonanie: |
Zadeklaruj właściwość do odczytu i zapisu dla struktury bądź klasy. | Deklarując właściwość określ jej nazwę (zgodnie z dokumentacją musi być ona z dużej litery) potem napisz bloki kodu GET i SET. |
Zadeklaruj właściwość tylko do odczytu. | Właściwość taka ma tylko blok GET. |
Zadeklaruj właściwość tylko do zapisu | Zadeklaruj właściwość, która ma tylko blok SET. |
Zadeklaruj właściwość w interfejsie | W interfejsie właściwości nie mają ciała. |
Zaimplementuj właściwości z interfejsu w strukturze bądź klasie | Struktura bądź klasa implementująca interfejs musi zawierać wszystkie opisane właściwości wraz z jej blokami GET i SET. |
Stworzenie automatycznej właściwości | Zdefiniuj właściwość z pustymi blokami kodu GET i SET. |
Użyj właściwości w czasie inicjacji obiektu | Określ wartość właściwości wewnątrz listy w nawiasach klamrowych po deklaracji obiektu. |
16 : Przeciążanie operatorów
Zadanie | Wykonanie: |
Jaka jest składnia do przeciążania operatorów + i –. | Metoda musisz być statyczna i zawierać słowo kluczowe'operator'po typie zwracanym oraz znak operatora przeciążanego. |
Jaka jest składnia do przeciążania operatorów ++ i -- | Jak wyżej. |
Jaka jest składnia do przeciążania operatorów =! i == | Jak wyżej. |
17 : Własna konwersja jawna i niejawna
Zadanie | Wykonanie: |
Jak napisać własną konwersje niejawną | Metoda ta nie posiada swojej nazwy natomiast w miejscu gdzie powinna być nazwa metody trzeba użyć dwóch słów kluczowych 'implicit' i'operator'. |
Jak napisać własną konwersje jawną | Metoda ta nie posiada swojej nazwy natomiast w miejscu gdzie powinna być nazwa metody trzeba użyć dwóch słów kluczowych 'explicit'i'operator'. |
18 : Delegaty
Zadanie | Wykonanie: |
Zadeklarowanie delegaty | Napisz słowo kluczowe ‘delegate’ ,a potem typ, który ma być zwracany ,a później nazwę delegaty ,a na końcu w nawiasach parametry, które mają być przyjmowane. |
Stworzenie instancji delegaty z jedną metodą | Składnia jest podobna jak w strukturze i w klasie. Napisz słowo ‘new’ ,a potem nazwę typu delegaty. W nawiasie można podać jedną metodę, która będzie wywoływana wraz z delegatą. |
Wywołaj delegatę | Składnia jest identyczna jak w wypadku wywołania metody. Uwaga przed wywołaniem delegaty warto sprawdzić czy zawiera ona jakieś przypisane metody. |
19 : Wyrażenia lambda delegaty
Zadanie | Wykonanie: |
Pokaż przykład stosujący wyrażenie lambda. | |
20 : Piszemy zdarzenia
Zadanie | Wykonanie: |
Zadeklarowanie zdarzenia | Napis słowo ‘event’ potem nazwę typu delegaty ,a później nazwę zdarzenia. Nie zapomnij też o modyfikatorze dostępu na początku. |
Subskrybuj zdarzenie | Stwórz instancje delegaty (tego samego typu co zdarzenie) i dołącz ją do zdarzenia za pomocą operatora +=. Możesz też użyć operatora“+=” bez słowa ‘new’ wtedy kompilator za ciebie stworzy nową instancje delegaty. Używając tego operatora w ten sposób możesz przypisać więcej delegat do danego zdarzenia. |
21 : Klasy generyczne
Zadanie | Wykonanie: |
Stwórz obiekt kolekcji Generics. Dodaj do niego jeden element | Określ odpowiedni typ w wewnątrz <T>. |
22 : Destruktor i Garbage Collection
Zadanie | Wykonanie: |
Napisz destruktor | Napisz metodę, która ma taką samą nazwę jak klasa i która zaczyna się od znaku tyldy ~. Metoda ta nie może mieć modyfikatora dostępu i nie może zwracać żadnego parametru, jak i ich przyjmować. |
Wywołaj destruktor | Nie możesz wywołać destruktora. Tylko Garbage Collector może go wywołać. |
Wymuś działanie Garbage Collector | Nie zalecane. |
Spis treści kursu
Spis treści kursu: