Programování v jazyku C# II.
9.kapitola
Reflexe • Způsob získání informací o software za běhu • Umožňuje získat z .NET assembly info o – – – –
jmenných prostorech třídách, strukturách a rozhraních metodách a datech atributech
• Umožňuje volat metody typů, používat data, . . .
2/20
Třída System.Reflection.Assembly • Reprezentuje assembly • Získání instance – ke známému typu • Type.Assembly
– ze souboru • Assembly.LoadFrom(soubor)
– k vykonávanému kódu • Assembly.GetExecutingAssembly
• Poskytuje přístup – k typům • GetTypes()
– k atributům • GetCustomAttributes()
3/20
Třída System.Activator • Obsahuje metody pro vytvorření instance – z typu • CreateInstance(type)
– ze jména typu • CreateInstanceFrom(string, string) • jméno assembly, jméno typu
4/20
Pluginy – zásuvné moduly • Umožňují rozšiřovat funkčnost programu bez zásahu do programu – přidáním .dll knihoven
• V .NET snadná implementace – reflexe – rozhraní – atributy
5/20
Příklad rozhraní public class interface IPlugin { string Spust(); }
6/20
Příklad pluginu • Při psaní knihovny s pluginy nutno přidat referenci na aplikaci (na knihovnu s definicí rozhraní) public class Plugin1 : IPlugin { public string Spust() { return "Spusteny Plugin1"; } }
7/20
Příklad aplikace ... string[] soubory = Directory.GetFiles(adresarPlugin,"*.dll"); foreach(string soubor in soubory) { Assembly assembly = Assembly.LoadFrom(soubor); Type[] typy = assembly.GetTypes(); foreach(Type typ in typy) { if(typ.GetInterface("IPlugin")!= null) { Console.WriteLine(typ.Name); IPlugin plugin = (IPlugin) Activator.CreateInstance(typ); Console.WriteLine(plugin.Spust()); } } } ... 8/20
Nastavení a konfigurace • Nastavení – – – – – –
ukládá nastavení aplikace či uživatelské nastavení dědí se od ApplicationSettingBase automaticky generovaná třída položky jsou typované aplikační nastavení – nelze měnit za běhu uživatelské nastavení – lze měnit za běhu
• Konfigurace – ovlivňuje běh aplikace – obdoba web.config
• Soubor <jméno aplikace>.config
9/20
Třída ApplicationSettingBase • Metody – Reload • nahraje nastavení ze souboru
– Reset • načte defaultní hodnoty
– Save • uloží aktuální verzi
• Události – PropertyChanged • při změně hodnoty
– SettingsLoaded/Saving • nastavení bylo načteno/je ukládáno
10/20
Jmenný prostor System.Configuration • Třída Configuration – přístup k jednotlivým sekcím konfigurace
• Třída ConfigurationSection – reprezentuje sekci v konfigu
• Třída ConfigurationManager – třída pro manipulaci s konfigurací – umožňuje získat instanci Configuration
11/20
Zdroje • Možnost zahrnout do aplikace externí data • Jazykově nezávislé zdroje – aplikační zdroje (ikony, bitmapy, zvuky, . . . ) – součástí hlavní assembly
• Jazykově závislé zdroje – popisky UI, hlášky, . . . – výchozí verze součástí hlavní assembly – další jazyky v externích satelitních assembly
12/20
Přímo podporované zdroje • • • • •
Řetězce Obrázky Ikony Zvuky Soubory
13/20
Generování a linkování zdroju • Program resgen.exe – kompiluje zdroje do souboru *.resources – vstupy • textový soubor – formát jméno=hodnota • *.resx soubor – xml soubor (podpora v MSVS)
• Program al.exe – linkování assembly – možnost vložit *.resources
• Přímá podpora v MSVS – vlastnost Build Action: Embedded Resource
14/20
Zdroje v MSVS • Formuláře si přímo generují .resx soubory – automaticky se přidávají do assembly
• Automaticky generovaná třída Resources – soubory Resources.resx a Resources.Designer.cs – položky jsou typované – snadné vytváření/používání
15/20
Třída ResourceManager • Hlavní třída pro práci se zdroji • Metody – – – –
GetString – načte řetězec ze zdroje GetObject – načte objekt ze zdroje GetStream – vrátí stream GetResourceSet – vrátí požadovanou jazykovou mutaci zdrojů
16/20
Lokalizace zdrojů • Více souborů, každý v jiné jazykové mutaci – soubor.resources – soubor.en.resources – soubor.cs-CZ.resources
• Mohou být součástí hlavní assembly – přidání nové jazykové mutace = nutno přeložit a vydat novou distribuci
• Mohou být umístěny v satelitních assembly – v hlavní assembly pouze výchozí jazyk – pro přidání verze stačí přidat odpovídající assembly
17/20
Satelitní assembly • • • •
Vytvoří se z resources souboru Satelitní assembly musí mít shodnou verzi s hlavní assembly Možnost umístit do GAC Příklad vytvoření – al.exe /t:lib /embed:Aplikace.Form1.cs.resources /culture:cs /out:Aplikace.resources.dll /template:Aplikace.exe
18/20
Lokalizace formulářů • • • • • •
Podpora v MSVS V properties vybrat jazyk Přepsat názvy kontrolek Automaticky se vygeneruje .resx Automaticky se vytvoří satelitní assembly Možnost kombinovat s externími soubory
19/20
Konec
20/20