Názorný postup: Vytváření komponent s Visual C#
Komponenty poskytují opakovaně použitelný kód objektů.Aplikace, která používá kód komponenty, vytváření objektů a jejich vlastností a metod, volání je označována jako klienta.Klient může nebo nemusí být ve stejném sestavení jako součást, kterou používá.
Následující postupy stavět na ostatní, tak důležité je pořadí, ve kterém je jejich provedení.
[!POZNÁMKA]
Dialogová okna a příkazy v nabídkách menu, které vidíte, se mohou lišit od těch popsaných v nápovědě, v závislosti na vašich aktivních nastaveních nebo edici.Chcete-li změnit nastavení, zvolte Import and Export Settings v menu Nástroje.Další informace naleznete v tématu Nastavení aplikace Visual Studio.
Vytváření projektu
Vytvoření knihovny tříd CDemoLib a CDemo součást
Z soubor nabídce vyberte Nový a projektu otevřete Nový projekt dialogové okno.Vyberte Knihovna tříd šablona projektu ze seznamu Visual C# typy projektových a zadejte CDemoLib v název pole.
[!POZNÁMKA]
Vždy zadávejte název nového projektu, když ho vytváříte.Tím nastaví kořenový obor názvů, název sestavení a název projektu a také zajišťuje, že výchozí součásti budou ve správném oboru názvů.
V Aplikaci Solution Explorer, klepněte pravým tlačítkem na CDemoLib a vyberte Vlastnosti z místní nabídky.Všimněte si, že pole Výchozí jmenný prostor obsahuje CDemoLib.
Kořenový obor názvů lze kvalifikovat názvy částí v sestavení.Například dvě sestavení poskytují součásti s názvem CDemo, můžete zadat vaše CDemo komponenty pomocí CDemoLib.CDemo.
Zavřete dialogové okno.
Z projektu nabídce zvolte Přidat součást.
V Přidat novou položku vyberte položku Třídy komponenty a CDemo.cs v název pole.Klepněte na tlačítko Přidat vytvoření komponenty.
Součást s názvem CDemo je přidán do knihovny tříd.
V Aplikaci Solution Explorer, klepněte pravým tlačítkem na CDemo.cs a zvolte Zobrazení kódu z místní nabídky.Spustí editor kódu.
Oznámení : Component ihned po public partial class CDemo.V této části se označí třídy, ze kterého dědí své třídy.Součást ve výchozím nastavení dědí z Component třídy poskytované systémem.Component Třída poskytuje mnoho funkcí pro komponenty, včetně možnosti použití návrháře.
V Aplikaci Solution Explorer, klepněte pravým tlačítkem na File a zvolte Odstranit.Tím odstraníte výchozí třídu, která je součástí knihovny třídy není použitý v tomto návodu.
Z soubor nabídce zvolte Uložit všechny uložte projekt.
Přidání konstruktory a destruktory
Konstruktory řízení způsobu, jakým je inicializován komponenty; Finalize metoda řídí způsob jeho lomy dolů.Kód v konstruktoru a Finalize metodu CDemo třídy udržuje jako průběžný počet počet CDemo objekty v existenci.
Přidat kód pro konstruktor a destruktoru třídy CDemo
V Editor kódu, přidat proměnné členů udržovat průběžný celkový počet výskytů CDemo třídy a identifikační číslo pro každou instanci.
public readonly int InstanceID; private static int NextInstanceID = 0; private static long ClassInstanceCount = 0;
Protože InstanceCount a NextInstanceID členské proměnné jsou deklarovány static, existují pouze na úrovni třídy.Všechny výskyty CDemo , přístup k těmto členům bude používat stejné umístění paměti.První bude inicializován statické členy CDemo je třída uvedená v kódu.To může být první CDemo je vytvořen objekt nebo získat přístup k prvním jeden statické členy.
Vyhledejte public CDemo() a public CDemo(IContainer container), výchozí konstruktory pro CDemo třídy.V jazyce Visual C# mají všechny konstruktory stejný název jako třída.Komponenta může mít několik konstruktory, s různými parametry však musí mít stejný název jako komponenta.
[!POZNÁMKA]
Úroveň přístupu konstruktorů určuje, kteří klienti budou schopni vytvářet instance třídy.
Přidejte následující kód na public CDemo(), přibývá počet instancí, když nový CDemo je vytvořen a číslo ID instance.
[!POZNÁMKA]
Vždy přidat kód po volání InitializeComponent.V daném okamžiku všechny použité komponenty byly inicializovány.
InstanceID = NextInstanceID ++; ClassInstanceCount ++;
Jako readonly člena, InstanceID lze nastavit pouze v konstruktoru.
[!POZNÁMKA]
Ukázání na poměrně stanoviska tohoto přiřazení uživatelé znají multithreading bude InstanceID a přírůstkového NextInstanceID by měla být atomická operace.Tato a další problémy související s podprocesy jsou znázorněny v Názorný postup: Vytváření jednoduché komponenty s více podprocesy pomocí aplikace Visual C#.
Po skončení konstruktor přidáte následující metodu:
~CDemo() { ClassInstanceCount --; }
Tato metoda je volána destructora jsou označeny znakem tilda (~) u názvu třídy.Správce paměti volání destruktoru těsně před jeho nakonec uvolňuje volné paměti obsazené CDemo objektu.O provádění destruktor můžete provést vyčištění těsně před komponenty je odebrán z paměti.Jak uvidíte dále v tomto návodu, existují dobré důvody k uvolnění prostředků dříve.
Přidání vlastnosti třídy
CDemo Třída má pouze jednu vlastnost statickou vlastnost, která umožňuje klientovi o mnoho CDemo objekty jsou v paměti v daném okamžiku.Podobným způsobem lze vytvořit metody.
Vytvořit vlastnost CDemo třídy
Přidat následující prohlášení vlastnost CDemo třídy a umožňuje klientům získat počet instancí CDemo.
public static long InstanceCount { get { return ClassInstanceCount; } }
Testování komponenty
Test součásti, je třeba projekt, který ji používá.Tento projekt musí být první projekt, který se spustí po stisknutí tlačítka Spustit.
Přidat jako spuštění projektu řešení projektu klienta CDemoTest
Z soubor nabídce přejděte na Přidat a zvolte Nový projekt otevřete Přidat nový projekt dialogové okno.
Vyberte Aplikace systému Windows šablona projektu a typ CDemoTest v název a klepněte na tlačítko OK.
V Aplikaci Solution Explorer, pravým tlačítkem myši na CDemoTest a na nastavit jako spuštění projektu z místní nabídky.
Chcete-li použít CDemo součást testu projektu klient musí mít odkaz na projekt knihovny tříd.Po přidání odkazu, je vhodné přidat using prohlášení testovací aplikace pro zjednodušení používání komponenty.
Chcete-li přidat odkaz na projekt knihovny tříd
V Aplikaci Solution Explorer, klepněte pravým tlačítkem myši odkazy uzel bezprostředně pod CDemoTesta vyberte Přidat odkaz na z místní nabídky.
V dialogovém okně Přidat odkaz vyberte kartu Projekty.
Poklepejte na projekt knihovny tříd CDemoLib.Pod uzlem Odkazy projektu CDemoTest se objeví CDemoLib.
V Aplikaci Solution Explorer, klepněte pravým tlačítkem na Form1.cs a vyberte Zobrazení kódu z místní nabídky.
Přidání odkazu na CDemoLib umožňuje použít úplný název CDemo součást –, CDemoLib.CDemo.
Přidat použitím příkazu
Přidejte následující using prohlášení do seznamu using v horní části prohlášení Editor kódu pro Form1.
using CDemoLib;
Přidání using prohlášení umožňuje vynechat název knihovny a odkazují na typ komponenty jako CDemo.
Bude nyní vytvořit a používat testovací program testování komponenty.
Principy životnost objektu
CDemoTest Program bude ilustrují životnost objektu v.NET Framework vytvořením a uvolnění velkého počtu CDemo objektů.
Přidání kódu k vytvoření a uvolnit objekty CDemo
Klepněte na Form1.cs[Design se vraťte do okna Návrhář.
Přetáhněte Button a Timer z Všechny model Windows Forms kartě nástrojů do Form1 plochy návrhu.
Nonvisual Timer komponenty se zobrazí na samostatné návrhová plocha pod formulářem.
Poklepejte na ikonu timer1 vytvořte metodu zpracování událostí u komponent timer1 Tick událostí.Umístěte následující kód v metodě zpracování událostí.
this.Text = "CDemo instances: " + CDemo.InstanceCount;
Na všech značek časovač titulek formuláře zobrazí aktuální počet instancí pro CDemo třídy.Název třídy se používá jako kvalifikátor pro statickému InstanceCount vlastnost – není nutné vytvořit instanci CDemo přístup statický člen.
Vyhledejte konstruktor pro Form1 (public Form1()) a přidejte následující kód po volání InitializeComponent().
timer1.Enabled = true;
Jakmile je vytvořen ve formuláři spustí časovač.
Klepněte Form1.cs [návrh kartu vrátíte Návrhář.
Poklepejte Button na Form1, vytvořte metodu zpracování událostí na tlačítku pro Click událostí.Umístěte následující kód v metodě zpracování událostí.
CDemo cd; int ct; for (ct = 0; ct < 1000; ct++) cd = new CDemo();
Tento kód může vypadat podivné vám.Jako každá instance CDemo je vytvořena, je vydána předchozí instance.Když for smyčka provádí, bude existovat pouze jedna instance CDemo vlevo.V případě, že odpisová metoda zpracování událostí, dokonce instanci budou vydány, protože proměnná cd přejde mimo rozsah.
Jak vám může mít uhodnout již, nebude nástroj událostem poměrně tímto způsobem.
Spustit a ladění projekty CDemoTest a CDemo
Stiskněte klávesu F5 spusťte řešení.
Spustit klienta projektu, a Form1 se zobrazí.Všimněte si, že titulek formuláře zobrazí "CDemo instance: 0".
Klikněte na tlačítko.Zobrazí titulek formuláře "CDemo instance: 1000".
Instance CDemo byly uvolněny všechny podle času na tlačítko Click dokončení postupu zpracování událostí.Proč jste jim byla dokončena?Správce paměti v krátkosti dokončí objekty na pozadí nízkou prioritou.Priorita pouze bumped, pokud systém získává nedostatku paměti.Tato lazy schéma sběr odpadků umožňuje velmi rychlé objekt přidělení.
Klepněte na tlačítko několik dalších doby sledování titulek.V některých případech bude počet instancí náhle přetažení.To znamená, že správce paměti má regenerované paměti některých objektů.
[!POZNÁMKA]
Pokud jste vybrali více než desetkrát a počet CDemo není instancí poklesla, bude pravděpodobně nutné upravit kód tak, aby používala více paměti.Zavřete formulář se vrátíte do vývojového prostředí a zvýšit počet iterací v for smyčky na 10 000.Spusťte znovu projektu.
Opakujte krok 3.Dostanete dále tuto dobu před správce paměti dokončí více objektů.
Ve skutečnosti při každém opakujte krok 3, nebude pravděpodobně možné přidělit více CDemo objekty před správce paměti krocích.Důvodem je, že více a více Visual Studio jsou odloženy, opouští více místa pro instance CDemo.
Zavřete formulář se vrátíte do vývojového prostředí.