2. Programowanie Komponentowe
Wykład #5: Wprowadzenie do srodowiska .NET
Mikołaj Olszewski
Wydział Zastosowan Informatyki i Matematyki
Szkoły Głównej Gospodarstwa Wiejskiego
4.11.2014
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 2 / 31
3. Plan wykładu
1 Srodowisko .NET
2 Komponenty na platformie .NET
3 Wewnetrzna nomenklatura .Net
4 Podsumowanie
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 3 / 31
4. Srodowisko .NET
Plan wykładu
1 Srodowisko .NET
2 Komponenty na platformie .NET
3 Wewnetrzna nomenklatura .Net
4 Podsumowanie
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 4 / 31
5. Srodowisko .NET
Wprowadzenie
Problemy z przenaszalnoscia (WinAPI)
miedzy procesorami
miedzy wersjami systemu
Rozwiazanie — kod posredni CIL (jak w Javie)
kompilacja do kodu maszynowego w momencie wywołania — JIT
cache’owanie kodu maszynowego
Rozwój platformy
1.0 — 13.02.2002 — VisualStudio .NET
...
4.5.1 — 17.10.2013 — VisualStudio 2013
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 5 / 31
6. Srodowisko .NET
Common Language Runtime
Lokalizowanie, kompilowanie i wykonywanie kodu posredniego
Zarzadzanie pamiecia i bezpieczenstwem
Dostep do systemu opracyjnego
System scisłych typów (problemy)
Common Language Specification
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 6 / 31
7. Srodowisko .NET
Wykonywanie kodu
kod zródłowy ! CIL
CIL ! kod bajtowy, asemblacja
bytecode ! kod natywny (JIT)
wykonanie kodu natywnego
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 7 / 31
8. Srodowisko .NET
Common Intermediate Language
1 . a s s embl y He l loWor ld
2 . c l a s s auto a n s i HelloWorldApp
3 f
4 . method p u b l i c h i d e b y s i g s t a t i c void Main ( ) c i l managed
5 f
6 . e n t r y p o i n t
7 . maxstack 1
8 l d s t r ” He l l o wor ld . ”
9 c a l l void [ ms c o r l i b ] System . Consol e : : Wr i t eLi n e ( s t r i n g )
10 r e t
11 g
12 g
odpowiednik asemblera
tłumaczony na kod bajtowy
DLL i EXE
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 8 / 31
9. Srodowisko .NET
Assemblacje
Odpowiednik na
niedogodnosci DLL-i
Oddzielenie logicznych
atrybutów od fizycznej
paczki
Wynikowo: DLL lub
EXE (mała róznica)
Moze zawierac wiele
modułów (plików)
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 9 / 31
10. Srodowisko .NET
Metadane
Wewnatrz asemblacji
Generowane
automatycznie
Opis dostepnych
typów
nazw
widocznosci
zaleznosci
Mozliwosc odczytu przez
refleksje
Manifest — opis
asemblacji
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 10 / 31
11. Srodowisko .NET
Manifest
using System.Reflection;
using System.Rue.CompilerServices;
[assembly: AssemblyTitle("MyAssembly")]
[assembly: AssemblyDescription("Assembly containing my .NET components")]
[assembly: AssemblyCompany("My Company")]
[assembly: AssemblyCopyright("Copyright c
My Company 2005")]
[assembly: AssemblyTrademark("MyTrademark")]
[assembly: AssemblyVersion("1.2.3.4")]
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 11 / 31
12. Srodowisko .NET
Kompatybilnosc binarna
Metadane w roli głównej
IL zawiera odwołania poprzez tokeny (identyfikator i indeks)
Odwołania fizyczne obliczane w locie
Kazda klasa jest binarnym komponentem
Brak ograniczen do interfejsów
Binarne dziedziczenie
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 12 / 31
13. Komponenty na platformie .NET
Plan wykładu
1 Srodowisko .NET
2 Komponenty na platformie .NET
3 Wewnetrzna nomenklatura .Net
4 Podsumowanie
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 13 / 31
14. Komponenty na platformie .NET
Wprowadzenie
Mozliwosc tworzenie komponentów w stary sposób COM/COM+,
OLE/AcitveX
Kazda klasa moze byc komponentem
Asemblacje - naturalne komponenty
Srodowisko zarzadza łaczeniem komponentów
Wiecej czasu na implementacje logiki
Mozliwe podejscie „czysto” obiektowe
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 14 / 31
15. Komponenty na platformie .NET
Wprowadzenie
Mozliwosc tworzenie komponentów w stary sposób COM/COM+,
OLE/AcitveX
Kazda klasa moze byc komponentem
Asemblacje - naturalne komponenty
Srodowisko zarzadza łaczeniem komponentów
Wiecej czasu na implementacje logiki
Mozliwe podejscie „czysto” obiektowe (nie korzystac!)
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 14 / 31
16. Komponenty na platformie .NET
Pryncypia programowania komponentowego
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 15 / 31
17. Komponenty na platformie .NET
Pryncypia programowania komponentowego
Separacja interfejsu od implementacji: interfejsy i klasy
Binarna kompatybilnosc miedzy klientem a serwerem: asemblacje
Niezaleznosc jezykowa: CLR
Transparentnosc lokalizacji kodu: WCF
Zarzadzanie wielowatkowoscia: standard, TPL
Wsparcie dla wersjonowania: asemblacje (vs. DLL Hell)
Bezpieczenstwo na poziomie komponentów: security policy
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 16 / 31
18. Komponenty na platformie .NET
Pryncypia programowania komponentowego
Separacja interfejsu od implementacji: interfejsy i klasy
Binarna kompatybilnosc miedzy klientem a serwerem: asemblacje
Niezaleznosc jezykowa: CLR
Transparentnosc lokalizacji kodu: WCF
Zarzadzanie wielowatkowoscia: standard, TPL
Wsparcie dla wersjonowania: asemblacje (vs. DLL Hell)
Bezpieczenstwo na poziomie komponentów: security policy
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 16 / 31
19. Komponenty na platformie .NET
Pryncypia programowania komponentowego
Separacja interfejsu od implementacji: interfejsy i klasy
Binarna kompatybilnosc miedzy klientem a serwerem: asemblacje
Niezaleznosc jezykowa: CLR
Transparentnosc lokalizacji kodu: WCF
Zarzadzanie wielowatkowoscia: standard, TPL
Wsparcie dla wersjonowania: asemblacje (vs. DLL Hell)
Bezpieczenstwo na poziomie komponentów: security policy
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 16 / 31
20. Komponenty na platformie .NET
Pryncypia programowania komponentowego
Separacja interfejsu od implementacji: interfejsy i klasy
Binarna kompatybilnosc miedzy klientem a serwerem: asemblacje
Niezaleznosc jezykowa: CLR
Transparentnosc lokalizacji kodu: WCF
Zarzadzanie wielowatkowoscia: standard, TPL
Wsparcie dla wersjonowania: asemblacje (vs. DLL Hell)
Bezpieczenstwo na poziomie komponentów: security policy
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 16 / 31
21. Komponenty na platformie .NET
Pryncypia programowania komponentowego
Separacja interfejsu od implementacji: interfejsy i klasy
Binarna kompatybilnosc miedzy klientem a serwerem: asemblacje
Niezaleznosc jezykowa: CLR
Transparentnosc lokalizacji kodu: WCF
Zarzadzanie wielowatkowoscia: standard, TPL
Wsparcie dla wersjonowania: asemblacje (vs. DLL Hell)
Bezpieczenstwo na poziomie komponentów: security policy
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 16 / 31
22. Komponenty na platformie .NET
Pryncypia programowania komponentowego
Separacja interfejsu od implementacji: interfejsy i klasy
Binarna kompatybilnosc miedzy klientem a serwerem: asemblacje
Niezaleznosc jezykowa: CLR
Transparentnosc lokalizacji kodu: WCF
Zarzadzanie wielowatkowoscia: standard, TPL
Wsparcie dla wersjonowania: asemblacje (vs. DLL Hell)
Bezpieczenstwo na poziomie komponentów: security policy
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 16 / 31
23. Komponenty na platformie .NET
Pryncypia programowania komponentowego
Separacja interfejsu od implementacji: interfejsy i klasy
Binarna kompatybilnosc miedzy klientem a serwerem: asemblacje
Niezaleznosc jezykowa: CLR
Transparentnosc lokalizacji kodu: WCF
Zarzadzanie wielowatkowoscia: standard, TPL
Wsparcie dla wersjonowania: asemblacje (vs. DLL Hell)
Bezpieczenstwo na poziomie komponentów: security policy
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 16 / 31
24. Komponenty na platformie .NET
Wsparcie dla programowania komponentowego
Wspólna klasa bazowa: object
Programowanie deklaratywne: atrybuty
Szczegółowe zarzadzanie bezpieczenstwem
Uproszczone wdrazanie: asemblacje prywantne lub w GAC
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 17 / 31
25. Komponenty na platformie .NET
Tworzenie komponentów
VS ! Rozwiazanie, Główny projekt: exe, dll, web
Rozwiazanie ! Projekty
1 projekt – 1 asemblacja
Projekt ! Referencje
mozliwosc ustawienia sciezki poszukiwania
dll i exe
Asemblacje
wersje
klasy czesciowe (partial)
Przestrzenie nazw
global
aliasowanie
Zakres widzialnosci
internal (domyslny)
protected internal
zaprzyjaznianie: [assembly: InternalsVisibleTo("MyClient")]
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 18 / 31
26. Komponenty na platformie .NET
Tworzenie komponentów
VS ! Rozwiazanie, Główny projekt: exe, dll, web
Rozwiazanie ! Projekty
1 projekt – 1 asemblacja
Projekt ! Referencje
mozliwosc ustawienia sciezki poszukiwania
dll i exe
Asemblacje
wersje
klasy czesciowe (partial)
Przestrzenie nazw
global
aliasowanie
Zakres widzialnosci
internal (domyslny)
protected internal
zaprzyjaznianie: [assembly: InternalsVisibleTo("MyClient")]
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 18 / 31
27. Komponenty na platformie .NET
Tworzenie komponentów
VS ! Rozwiazanie, Główny projekt: exe, dll, web
Rozwiazanie ! Projekty
1 projekt – 1 asemblacja
Projekt ! Referencje
mozliwosc ustawienia sciezki poszukiwania
dll i exe
Asemblacje
wersje
klasy czesciowe (partial)
Przestrzenie nazw
global
aliasowanie
Zakres widzialnosci
internal (domyslny)
protected internal
zaprzyjaznianie: [assembly: InternalsVisibleTo("MyClient")]
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 18 / 31
28. Komponenty na platformie .NET
Tworzenie komponentów
VS ! Rozwiazanie, Główny projekt: exe, dll, web
Rozwiazanie ! Projekty
1 projekt – 1 asemblacja
Projekt ! Referencje
mozliwosc ustawienia sciezki poszukiwania
dll i exe
Asemblacje
wersje
klasy czesciowe (partial)
Przestrzenie nazw
global
aliasowanie
Zakres widzialnosci
internal (domyslny)
protected internal
zaprzyjaznianie: [assembly: InternalsVisibleTo("MyClient")]
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 18 / 31
29. Komponenty na platformie .NET
Tworzenie komponentów
VS ! Rozwiazanie, Główny projekt: exe, dll, web
Rozwiazanie ! Projekty
1 projekt – 1 asemblacja
Projekt ! Referencje
mozliwosc ustawienia sciezki poszukiwania
dll i exe
Asemblacje
wersje
klasy czesciowe (partial)
Przestrzenie nazw
global
aliasowanie
Zakres widzialnosci
internal (domyslny)
protected internal
zaprzyjaznianie: [assembly: InternalsVisibleTo("MyClient")]
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 18 / 31
30. Komponenty na platformie .NET
Tworzenie komponentów
VS ! Rozwiazanie, Główny projekt: exe, dll, web
Rozwiazanie ! Projekty
1 projekt – 1 asemblacja
Projekt ! Referencje
mozliwosc ustawienia sciezki poszukiwania
dll i exe
Asemblacje
wersje
klasy czesciowe (partial)
Przestrzenie nazw
global
aliasowanie
Zakres widzialnosci
internal (domyslny)
protected internal
zaprzyjaznianie: [assembly: InternalsVisibleTo("MyClient")]
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 18 / 31
31. Komponenty na platformie .NET
Wskazówki do budowy komponentu
Modelowanie abstrakcji za pomoca interfejsów
specjalizacja
uzywanie ich zamiast konkretnych implementacji
rzutowanie za pomoca operatora as
Ukrywanie implementacji
internal
fasada i delegacje
implementacja explicite
Uzywanie kompatybilnosci binarnej
osobne asemblacje do kontraktów i ich implementacji
dodawanie funkcjonalnosci (bez usuwania!)
Zarzadzanie zasobami — deterministyczna finalizacja
Open() / Close()
Dispose(), GC.SuppressFinalize(this)
IDisposable, using
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 19 / 31
32. Komponenty na platformie .NET
Wskazówki do budowy komponentu
Modelowanie abstrakcji za pomoca interfejsów
specjalizacja
uzywanie ich zamiast konkretnych implementacji
rzutowanie za pomoca operatora as
Ukrywanie implementacji
internal
fasada i delegacje
implementacja explicite
Uzywanie kompatybilnosci binarnej
osobne asemblacje do kontraktów i ich implementacji
dodawanie funkcjonalnosci (bez usuwania!)
Zarzadzanie zasobami — deterministyczna finalizacja
Open() / Close()
Dispose(), GC.SuppressFinalize(this)
IDisposable, using
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 19 / 31
33. Komponenty na platformie .NET
Wskazówki do budowy komponentu
Modelowanie abstrakcji za pomoca interfejsów
specjalizacja
uzywanie ich zamiast konkretnych implementacji
rzutowanie za pomoca operatora as
Ukrywanie implementacji
internal
fasada i delegacje
implementacja explicite
Uzywanie kompatybilnosci binarnej
osobne asemblacje do kontraktów i ich implementacji
dodawanie funkcjonalnosci (bez usuwania!)
Zarzadzanie zasobami — deterministyczna finalizacja
Open() / Close()
Dispose(), GC.SuppressFinalize(this)
IDisposable, using
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 19 / 31
34. Komponenty na platformie .NET
Wskazówki do budowy komponentu
Modelowanie abstrakcji za pomoca interfejsów
specjalizacja
uzywanie ich zamiast konkretnych implementacji
rzutowanie za pomoca operatora as
Ukrywanie implementacji
internal
fasada i delegacje
implementacja explicite
Uzywanie kompatybilnosci binarnej
osobne asemblacje do kontraktów i ich implementacji
dodawanie funkcjonalnosci (bez usuwania!)
Zarzadzanie zasobami — deterministyczna finalizacja
Open() / Close()
Dispose(), GC.SuppressFinalize(this)
IDisposable, using
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 19 / 31
35. Komponenty na platformie .NET
Rozwiazywanie zaleznosci
Standardowo brak sensownego rozwiazania
jedynie bezposrednie powiazanie (przez referencje)
zaleznosc binarna
koniecznosc wystepowania asemblacji o danej nazwie
koniecznosc wystepowania uzywanych typów
Mechanizmy introspekcji i refleksji
introspekcja typów (odkrywanie interfejsów)
replikacja (tworzenie nowych instancji)
do zapoznania: Type, Assembly, Activator
Wsparcie dla róznych rodzajów zaleznosci
bezposrednia / natychmiastowa
nowa instancja
singleton
leniwa (Lazy<T>)
fabrykowalna (Func<T>)
wyliczeniowa (Enumerable<T>)
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 20 / 31
36. Komponenty na platformie .NET
Rozwiazywanie zaleznosci
Standardowo brak sensownego rozwiazania
jedynie bezposrednie powiazanie (przez referencje)
zaleznosc binarna
koniecznosc wystepowania asemblacji o danej nazwie
koniecznosc wystepowania uzywanych typów
Mechanizmy introspekcji i refleksji
introspekcja typów (odkrywanie interfejsów)
replikacja (tworzenie nowych instancji)
do zapoznania: Type, Assembly, Activator
Wsparcie dla róznych rodzajów zaleznosci
bezposrednia / natychmiastowa
nowa instancja
singleton
leniwa (Lazy<T>)
fabrykowalna (Func<T>)
wyliczeniowa (Enumerable<T>)
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 20 / 31
37. Komponenty na platformie .NET
Rozwiazywanie zaleznosci
Standardowo brak sensownego rozwiazania
jedynie bezposrednie powiazanie (przez referencje)
zaleznosc binarna
koniecznosc wystepowania asemblacji o danej nazwie
koniecznosc wystepowania uzywanych typów
Mechanizmy introspekcji i refleksji
introspekcja typów (odkrywanie interfejsów)
replikacja (tworzenie nowych instancji)
do zapoznania: Type, Assembly, Activator
Wsparcie dla róznych rodzajów zaleznosci
bezposrednia / natychmiastowa
nowa instancja
singleton
leniwa (Lazy<T>)
fabrykowalna (Func<T>)
wyliczeniowa (Enumerable<T>)
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 20 / 31
38. Komponenty na platformie .NET
Rozwiazywanie zaleznosci
Standardowo brak sensownego rozwiazania
jedynie bezposrednie powiazanie (przez referencje)
zaleznosc binarna
koniecznosc wystepowania asemblacji o danej nazwie
koniecznosc wystepowania uzywanych typów
Mechanizmy introspekcji i refleksji
introspekcja typów (odkrywanie interfejsów)
replikacja (tworzenie nowych instancji)
do zapoznania: Type, Assembly, Activator
Wsparcie dla róznych rodzajów zaleznosci
bezposrednia / natychmiastowa
nowa instancja
singleton
leniwa (Lazy<T>)
fabrykowalna (Func<T>)
wyliczeniowa (Enumerable<T>)
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 20 / 31
39. Komponenty na platformie .NET
Rozwiazywanie zaleznosci
Standardowo brak sensownego rozwiazania
jedynie bezposrednie powiazanie (przez referencje)
zaleznosc binarna
koniecznosc wystepowania asemblacji o danej nazwie
koniecznosc wystepowania uzywanych typów
Mechanizmy introspekcji i refleksji
introspekcja typów (odkrywanie interfejsów)
replikacja (tworzenie nowych instancji)
do zapoznania: Type, Assembly, Activator
Wsparcie dla róznych rodzajów zaleznosci
bezposrednia / natychmiastowa
nowa instancja
singleton
leniwa (Lazy<T>)
fabrykowalna (Func<T>)
wyliczeniowa (Enumerable<T>)
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 20 / 31
40. Komponenty na platformie .NET
Rozwiazywanie zaleznosci
Standardowo brak sensownego rozwiazania
jedynie bezposrednie powiazanie (przez referencje)
zaleznosc binarna
koniecznosc wystepowania asemblacji o danej nazwie
koniecznosc wystepowania uzywanych typów
Mechanizmy introspekcji i refleksji
introspekcja typów (odkrywanie interfejsów)
replikacja (tworzenie nowych instancji)
do zapoznania: Type, Assembly, Activator
Wsparcie dla róznych rodzajów zaleznosci
bezposrednia / natychmiastowa
nowa instancja
singleton
leniwa (Lazy<T>)
fabrykowalna (Func<T>)
wyliczeniowa (Enumerable<T>)
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 20 / 31
41. Komponenty na platformie .NET
Rozwiazywanie zaleznosci
Standardowo brak sensownego rozwiazania
jedynie bezposrednie powiazanie (przez referencje)
zaleznosc binarna
koniecznosc wystepowania asemblacji o danej nazwie
koniecznosc wystepowania uzywanych typów
Mechanizmy introspekcji i refleksji
introspekcja typów (odkrywanie interfejsów)
replikacja (tworzenie nowych instancji)
do zapoznania: Type, Assembly, Activator
Wsparcie dla róznych rodzajów zaleznosci
bezposrednia / natychmiastowa
nowa instancja
singleton
leniwa (Lazy<T>)
fabrykowalna (Func<T>)
wyliczeniowa (Enumerable<T>)
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 20 / 31
42. Komponenty na platformie .NET
Przykładowy interfejs kontenera
1 p u b l i c i n t e r f a c e ICo n t a i n e r
2 f
3 void Re g i s t e r ( Assembly a s s embl y ) ;
4 void Re g i s t e r (Type t ype ) ;
5 void Re g i s t e r ( o b j e c t impl ) ;
6 void Re g i s t e r <T>(T impl ) where T : c l a s s ;
7 void Re g i s t e r <T>(Func<T> p r o v i d e r ) where T : c l a s s ;
8
9 T Re sol v e<T>() where T : c l a s s ;
10 g
Specyfikacja na bitbuckecie
Laboratoria
Własny kontener dla komponentów .NET
(bez koniecznosci implementacji konkretnego interfejsu).
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 21 / 31
43. Komponenty na platformie .NET
Przykładowy interfejs kontenera
1 p u b l i c i n t e r f a c e ICo n t a i n e r
2 f
3 void Re g i s t e r ( Assembly a s s embl y ) ;
4 void Re g i s t e r (Type t ype ) ;
5 void Re g i s t e r ( o b j e c t impl ) ;
6 void Re g i s t e r <T>(T impl ) where T : c l a s s ;
7 void Re g i s t e r <T>(Func<T> p r o v i d e r ) where T : c l a s s ;
8
9 T Re sol v e<T>() where T : c l a s s ;
10 g
Specyfikacja na bitbuckecie
Laboratoria
Własny kontener dla komponentów .NET
(bez koniecznosci implementacji konkretnego interfejsu).
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 21 / 31
46. Wewnetrzna nomenklatura .Net
Klasa / Kontrolka / Komponent
Zewnetrzne zasoby bez edytora ! IDisposable
Edytor wizualny ! IComponent
Edytor wizualny i interfejs uzytkownika ! Control
Reszta — zwykłe klasy
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 24 / 31
47. Wewnetrzna nomenklatura .Net
Komponenty
System.ComponentModel.IComponent
Kontrola zewnetrznych zasobów — IDisposable
Wsparcie dla edytora
Przechowywanie w kontenerach
Marshaling
przez referencje — System.ComponentModel.Component
przez wartosc —
System.ComponentModel.MarshalByValueComponent
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 25 / 31
48. Wewnetrzna nomenklatura .Net
Kontrolki
Interfejs uzytkownika
Klasy bazowe:
System.Windows.Forms.Control
System.Web.UI.Control
Kazda kontrolka to komponent
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 26 / 31
49. Wewnetrzna nomenklatura .Net
Kontenery i parcele
Kontenery
System.ComponentModel.IContainer
zawieraja komponenty
Parcele
System.ComponentModel.ISite
zarzadzanie i komunikacja z komponentami
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 27 / 31
50. Podsumowanie
Plan wykładu
1 Srodowisko .NET
2 Komponenty na platformie .NET
3 Wewnetrzna nomenklatura .Net
4 Podsumowanie
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 28 / 31
51. Podsumowanie
Podsumowanie
Rewolucja w stosunku do dotychczasowego podejscia
Niezaleznosc od jezyka i platformy dzieki IL
Binarna kompatybilnosc wysokiej jakosci
Wsparcie dla programowania komponentowego
Wszystko moze byc komponentem
Wytyczne dobrego programowania komponentowego
Ułatwienia dla kontenerów
Komponenty specjalne
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 29 / 31
52. Podsumowanie
Do domu
Przeczytac rozdziały 2 – 4 „Programming .NET Components”
Zapoznac sie z architektura .NET i klasami pomocniczymi
Type, Assembly, Activator
Lazy<T>, Func<T>, Enumerable<T>
Stworzyc własny kontener rozwiazujacy zaleznosci miedzy
komponentami
wykorzystanie mechanizmów dostarczanych przez .NET (bez
koniecznosci implementowania specyficznych interfejsów)
zgodnosc ze specyfikacja na bitbuckecie
oryginalnosc rozwiazan
wersja binarna
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 30 / 31