Programowanie w języku C# z użyciem platformy .NET Core

część 2

Paweł Łukasik

O mnie

  • mgr Paweł Łukasik
  • plukasik@wszib.edu.pl / lukasik.pawel@gmail.com
  • blog.octal.pl/ostrapila.pl/dotnetomaniak.pl
  • @pawel_lukasik
  • github.com/pawlos
  • Microsoft MVP

ProgramistaMag

VirtualStudy.pro

C# 7.0 + kilka starszych

Plan działania

  • powtórka z rozrywki - przypomnienie z ostatnich zajęć
  • interfejsy
  • Enum/Struct
  • Rzutowanie
  • Kolekcje
  • Typy generyczne
  • Typy anonimowe
  • Delegaty
  • Zdarzenia
  • Wyrażenia lambda
  • LINQ
  • Wyjątki

Plan działania - jeśli starczy czasu

  • async/await
  • dynamic
  • refleksja
  • wprowadzenie do kodu pośredniego

Powtórka z rozrywki

  • środowisko uruchomieniowe
  • JIT
  • typy w C#/.net
    • Int, String, Bool, Double, System.Object, ...
  • OOP
    • abstrakcja, dziedziczenie, polimorfizm, kompozycja, hemretyzacja
  • interfejsy

Interfejsy/Interface'y

  • definiują publiczny kontrakt (zestaw metod/właściwości)
  • są implementowane przez klasy
  • klasa może implementować wiele interfejsów
  • umożliwiają rozdzielenie funkcji od konkretnych implementacji - abstrakcja
public interface ICollection
{
  int Count {get;}
  void CopyTo(Array a, Int32 index);
}

Enum

  • typ wyliczeniowy 
  • może przyjmować dwie formy
    • standardowa
    • flagi
  • pod spodem - typ int (można to zmienić - typ bazowy)

Struct

  • typ prosty wartościowy
  • dobry do przechowywania danych (bez logiki)
  • przekazywany przez wartość
  • tworzony na stosie (konsekwencje?)

Struct w .net?

  • DateTime
  • Color

Rzutowanie

  • zamiana jednego typu na drugi
  • może przyjmować dwie formy
    • direct cast => (string)obj
    • as => obj as string
  • boxing/unboxing

Kolekcje

  • zestaw typów pozwalający przechowywać zbiór obiektów
  • ArrayList, HashTable, Queue, ...
  • znajdują się w przestrzeni nazw System.Collections
ArrayList al = new ArrayList();
al.Add("Hello!");
al.Add("World");
al.Add(2017);

Typy generyczne/generyki

  • szablony typów
  • można je stosować to klas oraz metod
  • mogą posiadać ograniczenia
  • kowariancja/kontrawariancja
  • bardzo przydatne w kolekcjach - w zasadzie unika stosowania się niegenerycznych

Nullable<T> == T?

  • umożliwia opakowanie typów prostych w obiekt
  • dwa równoważne zapisy
    • Nullable<T> np. Nullable<int>
    • T? np. int?
  • operator ??

Typy anonimowe

  • var
  • typ jest "inferowany" (wnioskowany)
  • przydatne, ale nie zawsze (można przesadzić)

Delegaty

  • wskazują funkcję
  • słowo klucz: deletage
public deletage int Operation(int arg1, int arg2);

Anonimowe delegaty

  • wskazują funkcję bez jej jawnej deklaracji
  • ponownie słowo klucz: delegate
delegate (int x, int y) { return x+y;}

Zdarzenia

  • słowo kluczowe event
  • głównie w aplikacjach stanowych (desktop)
  • EventHandler
  • subskrypcja za pomocą +=

Wyrażenia lambda

  • upraszczają korzystanie z delegatów
  • mogą być proste jak
    • x=>x+1 // niejawny return (jeśli potrzebny)
  • lub bardziej złożone
    • (x,y) => { Console.WriteLine("{0},{1}",x,y); return x+y;}

LINQ

  • Language INtegrated Query
  • może być stosowane do obiektów, bazy danych, XML i innych źródeł
  • dwa "smaki"
    • SQL-like
    • fluent

Wyjątki

  • muszą dziedziczyć z klasy Exception
  • rzucane za pomocą throw
  • możliwa obsługa za pomocą try-catch/try-finally lub try-catch-finally
  • warunkowe obsługiwanie

async/await

  • uproszczenie pisania aplikacji asynchronicznych (I/O bound)
  • piszemy je jakby asynchroniczności nie było
  • duże uproszczenie analizowania flow

dynamic

  • prawdziwie dynamiczny typ
  • wiązany (binding) w runtime
  • może powodować trudno zauważalne błędy (brak sprawdzania w trakcie kompilacji)
  • czasem przydatny - ExpandoObject

Reflection/Refleksja

  • System.Reflection
  • Assembly -> Module -> Type
    • Methods/Properties/Fields

Wprowadzenie do IL

  • oparty na stosie
  • proste instrukcje
    • ldloc.0
    • add
    • ...
  • narzędzia: IlSpy, dnSpy

https://en.wikipedia.org/wiki/List_of_CIL_instructions

Programowanie w języku C# z użyciem platformy .NET Core

By Pawel Lukasik

Programowanie w języku C# z użyciem platformy .NET Core

Slajdy z kursu na studia podyplomowe na WSZIB - .net core

  • 2,195