Typy danych

Dzisiaj nieco o podstawach  a dokładniej o podstawowych typach danych :

  • Value Types – typy wartości, które opiszę dzisiaj.
  • Reference types – typy referencyjne.
  • Pointer types – wskaźniki, czyli coś co było często wykorzystywane w C++, ale nie zdarzyło mi się korzystać w C#.

Value Types

Typy wartościowe to typy dziedziczące po System.ValueType, i po których nie możemy dalej dziedziczyć. Typy wartości są często nazywane typami prostymi. Przechowywane są na stosie i każde ich użycie przekazuje kopię takiego obiektu do wywołania. Tak więc w celu modyfikacji  zmiennej w metodzie (co ogólnie nie jest dobrym pomysłem) musimy wykorzystać słowo kluczowe ref, o czym możemy poczytać tutaj. Czytaj dalej Typy danych

Parametry metod

Dzisiaj opowiem o tym jak za pomocą słów kluczowych można zmieniać działanie parametrów metod tak, ażeby wywołać określone zachowanie.

ref

To słowo kluczowe określa, że oznaczony nim parametr ma być traktowany jak referencja na obiekt. Z jego wykorzystaniem możemy modyfikować obiekty przekazane jako parametr. Dotyczy to zarówno typów ValueType jak również całych instancji obiektów referencyjnych. Co ważne ref umożliwia przekazywanie parametrów w obu kierunkach. Czytaj dalej Parametry metod

Przetwarzanie kolekcji z Linq to Object cz4

Dzisiaj ostatni odcinek z serii o Linq to object. Opowiem nieco więcej o metodach statystycznych oraz innych dostępnych w linq.

Metody Statystyczne

Metody statystyczne zwracają nam konkretne wartości obliczane na podstawie elementów z kolekcji.

Min, Max

Metody wybierają najmniejszą i największą wartość w naszej kolekcji. Można szeregować elementy po wartościach liczbowych lub jeśli nasz typ implementuje interface IComparable po naszych typach wprost.

Czytaj dalej Przetwarzanie kolekcji z Linq to Object cz4

Przetwarzanie kolekcji z Linq to Object cz3

Dzisiaj o szeregowaniu danych przy pomocy Linq.

Szeregowanie

Dzięki szeregowaniu możemy zmienić kolejność elementów w naszej kolekcji.

Reverse

Reverse odwraca kolejność elementów w kolekcji,  a więc pierwszy element będzie ostatnim a ostatni pierwszym.

Czytaj dalej Przetwarzanie kolekcji z Linq to Object cz3

Przetwarzanie kolekcji z Linq to Object cz1

Linq

Linq jest językiem zapytań, który dodaje warstwę abstrakcji pomiędzy różnymi typami danych a obiektami. Zapytania można zapisać na dwa sposoby:

  • Składnia zapytań, gdzie zapis linq jest podobny do zapytań SQL-owych, nie mniej jednak dla mnie jest mało intuicyjny i z tego sposobu nie korzystam.
    Przykładowe zapytanie
  • Fluent Api, ten rodzaj zapisu jest dla mnie dużo bardziej czytelny, do zapisu wykorzystujemy łańcuch metod

Czytaj dalej Przetwarzanie kolekcji z Linq to Object cz1

Zdarzenia – wywołanie, wykorzystanie i obsługa

Zdarzenia

Jeśli chcemy, ażeby jakiś fragment kodu reagował na zdarzenia z innego obiektu musimy przypisać funkcję obsługującą zdarzenie. Metoda obsługująca zdarzenie powinna przyjmować  dwa parametry:

  • obiekt klasy Object, który informuje przez co zostało wywołane zdarzenie
  • obiekt z argumentami zdarzenia typu dziedziczącego po EventArgs

Przypisanie wygląda następująco

W pierwszym przypadku wykorzystujemy metodę do obsługi zdarzenia, a w drugim metodę anonimową. Jeśli nie chcemy więcej otrzymywać informacji o zdarzeniach powinniśmy się wypisać z listy metod informowanych o zdarzeniach przy pomocy operatora -=

Deklaracja własnego zdarzenia

W celu zadeklarowania własnego eventu wykorzystujemy

Deklaracja ta powinna się znajdować wewnątrz klasy, która będzie to zdarzenie udostepniać.

Wywołanie zdarzenia

Jeśli chcemy wywołać zdarzenia poprzez nasz kod musimy obowiązkowo sprawdzić czy ktoś je zasubskrybował. Obecnie takie wywołanie jest proste

Konstrukcja ta jest dostępna od C# w wersji 6. W poprzednich wersjach powinniśmy sprawdzić czy event nie jest null-em.

Wykorzystanie zmiennej lokalnej jest zalecane w celu zapewnienia, że żaden wątek nie zmodyfikuje nam wartości pomiędzy sprawdzeniem a wywołaniem zdarzenia.