Jakub Čermák <
[email protected]> http://www.jcermak.cz
Microsoft Student Partner
Úvod, příklady použití, trocha teorie Struktura aplikace
Typy – obecně, primitivní typy, speciální typy Podmínky, cykly, namespaces Třídy, vlastní typy Hodnotové typy Managed halda, referenční objekty Stack semantics pro referenční objekty Polymorfismus Viditelnost
Další součásti objektového modelu Eventy, property, rozhraní
Generika, šablony Výjimky Pointery CLR Hosting
Referenční typ, jehož instance zapouzdřují metodu s danou signaturou Nelze použít stack semantics
Deklarace delegate void MujDelegat(int n); Srovnej: typedef void (*MujUkazatel) (int n);
Definice MujDelegat ^deleg = gcnew MujDelegat(fce); Nejde zkrátit
Volání deleg(42);
Notifikace změn nějakého objektu °Deklarace event EventHandler<EventArgs ^> ^evt;
Registrace handlerů x->MojeUdalost += gcnew EventHandler<EventArgs ^>(fce1);
Úprava chování Přepsání „submetod“ raise, add, remove Vlastní akce při změnách handleru, odlišení viditelnosti jednotlivých akcí
Name Title Group
Syntaktická zkratka za Get* a Set* metody Deklarace pomocí „submetod“ get a set Obdobně jako u eventů
Volání jako u proměnných
ref class Xsi { private: int x; public: property int MojeProperty // deklarace property { private: void set(int v) { x = v ; } //setter int get() { return x; } //getter } };
ref class Xsi { private: array
^x; public: property int MojeProperty[int, int] // deklarace property { void set(int i, int j, int val) { x[i,j] = v; } //setter, i a j je index, val je hodnota int get(int i, int j) { return x[i,j]; } //getter, i a j je index } };
Smečka abstraktních metod Ale i statických datových položek, funkcí a konstruktoru
Vnořování Dědičnost
public interface class Interface_B : Interface_A { property int Property_Block; event ClickEventHandler^ OnClick; void Function_1(); static void Function_3() { Console::WriteLine("in Function_3"); } };
Šablonová třída Vkládání managed dat do nativních objektů class CppClass { public: gcroot<String^> str; CppClass() {} };
Automatická konverze z gcroot na T
Atributy [Job( Access::Read, Priority=2 )] ref struct QueryService
Extension metody Přímá podpora není Volání jako statická Deklarace: Atribut System::Runtime::CompilerServices::Extension
Další součásti objektového modelu Property, eventy, rozhraní
Generika, šablony Výjimky Pointery CLR Hosting
Parametrizace typu bo funkce jiným typem nebo konstantou Vyhodnocení za kompilace, nelze za runtime Standardní z C++; funkční i pro managed Parciální specializace Šablonové třídy jako typový parametr template< template class T2>
Přístup k libovolným prvkům parametru Ověření při kompilaci Nemožnost systémově vynutit implementaci něčeho
template ref class TTrida { public: T hodnota; };
Parametrizace typu, funkce či delegátu jiným typem (ne konstanty) Vyhodnocení za runtime Možnost dynamicky vytvářet instance (reflection, jiné assembly)
funkční jen pro managed Nefunguje parciální specializace Přístup jen k vlastnostem objectu, pokud není constraint
generic ref class GTrida { public: T hodnota; };
Omezení kladená na typový parametr Vynucení dědičnosti z něčeho, nebo implementace rozhraní generic where T : IComparable, INěcoJinýho ref class Trida {}; Naked type constraint – dědičnost z jiného typ. Parametru
Bezparametrický konstruktor Where T : gcnew()
Value class nebo ref class
Nesting Nejde Generická by nešla dynamicky instanciovat
Template parametr použít pro generickou třídu OK Celé se to vyhodnotí při kompilaci
Generický parametr použít pro template třídu V runtime nejde vytvořit instance template třídy
Další součásti objektového modelu Property, eventy, rozhraní
Generika, šablony Výjimky Pointery CLR Hosting
Managed výjimky – dědí od System::Exception Unmanaged výjimky – vše ostatní Throw i try..catch stejný Použije se první vhodný catch blok Navíc finally blok
Unmanaged výjimky se mapují na System::Runtime::InteropServices:: SEHException
Name Title Group
Další součásti objektového modelu Property, eventy, rozhraní
Generika, šablony Výjimky Pointery CLR Hosting
Unmanaged ptr & reference Kus paměti
Managed handles & reference Konkrétní objekt nebo jeho část Měnící se hodnota
Generická třída Připichování managed objektů Adresa objektu v paměti se nezmění
Ekvivalent „fixed“ konstruktu v C# Automatická konverze na pointer pin_ptr p = &objekt->cislo;
Generická třída Podobnost s managed handle Updatován GC
Automatická konverze na pointer interior_ptr p = &objekt->cislo;
Další součásti objektového modelu Property, eventy, rozhraní
Generika, šablony Výjimky Pointery CLR Hosting
Vlastní hostovací aplikace pro managed kód Default CLR host – spouštění „normálně“
V nativním procesu spustit .net VM Úprava/přepsání vlastností a fcí VM Paměť, assembly loading, vlákna, IO, synchronization, GC, failure policy, security.... SetHostControl
Spec. podpora managed pluginů SQL Server IIS Server Asp.net
Internet Browser applets ~ Java
...
Name Title Group
Agenda Další součásti objektového modelu Eventy, property, rozhraní
Generika, šablony Výjimky Pointery CLR Hosting
Kontakt E-mail: [email protected] WWW: http://www.jcermak.cz
© 2007 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries. The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.