Třída vs. Součást vs. Ovládací prvek
Toto téma definuje součásti a kontroly; diskuse zde uvedené pomohou rozhodnout, kdy zavést třídu, která je komponenta nebo ovládací prvek.
[!POZNÁMKA]
Toto téma je o model Windows Forms a třídy ASP.Této diskuse není použití třídy WPF informace o vytváření ovládacích prvků technologie WPF, viz Přehled vytváření ovládacího prvku.
Následující seznam obsahuje rozsáhlé pokyny pro vývojáře.
Pokud vaše třída používá externí zdroje, ale nebudou použity na povrchu návrhu implementovat System.IDisposable, nebo je odvozena od třídy, která implementuje přímo nebo nepřímo IDisposable.
Pokud vaše třída bude použito na plochu návrhu (například Návrhář webové formuláře nebo model Windows Forms), System.ComponentModel.IComponent, nebo je odvozena od třídy, která implementuje přímo nebo nepřímo IComponent.Všimněte si, že IComponent rozšiřuje IDisposable, tak IComponent typu je vždy IDisposable typu.IComponent Typ má malý výkon režie přes IDisposable typu, který není IComponent, ale to je obecně posunu schopnost serveru IComponent v době návrhu a v době spuštění.(Umístění je vysvětleno dále v tomto tématu.)
Pokud chcete, aby třída, která je designable (používaný na plochu návrhu) a je zařazen podle odkazu lze odvodit z System.ComponentModel.Component.Componentzákladní provedení je IComponent typu, který je zařazen podle odkazu.
Pokud chcete designable třídu, která je zařazen podle hodnoty, lze odvodit z System.ComponentModel.MarshalByValueComponent.MarshalByValueComponentzákladní provedení je IComponent typu, který je zařazen podle hodnoty.
Pokud chcete zavést IComponent zadejte v hierarchii modelu objektu a nemůže odvodit ze základní implementace jako Component nebo MarshalByValueComponent z jednoho dědičnosti implementovat IComponent.
Pokud chcete, aby designable třída, která poskytuje uživatelské rozhraní, třídy je ovládací prvek.Ovládací prvek musí pocházet přímo nebo nepřímo z jednoho ovládacího prvku základní třídy: System.Windows.Forms.Control nebo System.Web.UI.Control.
[!POZNÁMKA]
Pokud je vaše třída ani designable ani obsahuje externí zdroje nutné IComponent nebo IDisposable typu.
Podle definice komponenty, řízení, kontejner a webu.
Součást
V , komponenta je třída, která implementuje System.ComponentModel.IComponent rozhraní nebo který odvozuje přímo nebo nepřímo z třídy, která implementuje IComponent.V programování se obvykle používá součást termín pro objekt, který je opakovaně a může spolupracovat s ostatními objekty.A komponenty splňují tyto obecné požadavky a dále obsahuje funkce, jako je řízení externích zdrojů a podporu návrhu.
Ovládat externí zdroje
IComponent Rozšiřuje rozhraní IDisposable rozhraní, které má metodu s názvem Dispose v jeho smlouvy.Při jeho provádění Dispose metoda, součást musí výslovně uvolnit externích zdrojů.To umožňuje deterministický uvolnit prostředky liší od výchozí nedeterministické vyčištění, který se stane prostřednictvím uvolněné.Vývojáři musí rozšířit Dispose v rámci hierarchie uzavření zajistit děti součást také uvolnit prostředky.Kromě toho musí vyvolat odvozené součásti Dispose metoda jeho základní třídy.
[!POZNÁMKA]
I když poskytuje explicitní kontrolu nad prostředky prostřednictvím Dispose, je vhodné zadat implicitní vyčištění finalizačních metod (destructor) prostředky zabránit trvale nevrací, pokud uživatel volání prostřednictvím Dispose na komponenty.
Následující příklad ukazuje vzorek pro provádění Dispose v základní součásti a odvozené součásti.
public class BaseComponent : IComponent {
// IComponent extends IDisposable.
public void Dispose() {
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing) {
if (disposing) {
// Free other state (managed objects).
}
// Free your own state (unmanaged objects).
}
// Simply call Dispose(false).
~BaseComponent(){
Dispose (false);
}
}
// Derived component.
public class DerivedComponent : BaseComponent {
protected override void Dispose(bool disposing) {
if (disposing) {
// Free other state.
}
// You must invoke the Dispose method of the base class.
base.Dispose(disposing);
// Free your own state.
...
}
// No finalizer/destructor.
// No Dispose() method.
}
' Design pattern for a base class.
Public Class BaseComponent
Implements IComponent
' Implement IDisposable
Public Overloads Sub Dispose()
Dispose(True)
GC.SuppressFinalize(Me)
End Sub
Protected Overloads Overridable Sub Dispose(disposing As Boolean)
If disposing Then
' Free other state (managed objects).
End If
' Free your own state (unmanaged objects).
' Set large fields to null.
End Sub
Protected Overrides Sub Finalize()
' Simply call Dispose(False).
Dispose (False)
End Sub
End Class
' Design pattern for a derived component.
Public Class DerivedComponent
Inherits BaseComponent
Protected Overloads Overrides Sub Dispose(disposing As Boolean)
If disposing Then
' Release managed resources.
End If
' Release unmanaged resources.
' Set large fields to null.
' Call Dispose on your base class.
Mybase.Dispose(disposing)
End Sub
' The derived class does not have a Finalize method
' or a Dispose method with parameters because it inherits
' them from the base class.
End Class
Podpora návrhu
Významnou součástí je designable, což znamená, že třída, která je součástí lze použít v prostředí rapid application development (RAD), jako je .Součást lze přidat do panelu nástrojů z , může být přetažený formuláře a s nimi na povrchu návrhu.Všimněte si, že základní podporu návrhu pro IComponent typů je integrována ; Vývojář komponenta nemá žádné další práci využívat základní funkce návrhu.
Další informace o podpoře v době návrhu naleznete v tématu Atributy součástí návrhu a Rozšíření podpory návrhu.
Hostitelem součásti
Komponentu lze Stíněný (hostitelem) v kontejneru (definované dále v tomto tématu).Součást je umístěno, spolupracuje s kontejnerem prostřednictvím svého webu (definované dále v tomto tématu) a má schopnost dotaz a získat služby z jeho kontejneru prostřednictvím webu.Zajistit prostředky jsou uvolněny, pokud je kontejner torn musí implementovat kontejner IDisposable rozhraní.Při jeho provádění Dispose metoda, kontejner musí uvolnit všechny prostředky, které obsahuje a vyvolat Dispose způsob jeho obsaženými komponentami.
Uzavření je logické a nemusí mít vizuální reprezentaci.Příkladem uzavření bez viditelného rozhraní je kontejner střední vrstvy, který servery, databázové součásti.Uzavření Visual je vidět v model Windows Forms designer a návrháři webových formulářů v .Vzhledu povrchu je kontejner, který je hostitelem součásti formuláře (ve formulářích webové stránce component).
Součást zařazování
Komponenty lze vzdáleně připojit nebo nonremotable.Vzdálené komponenty jsou předávána odkaz nebo hodnotu.Zařazování zahrnuje odesílání objektů přes hranice, jako Domény aplikace (lehký procesy), procesy a dokonce i stroje.Když objekt je zařazen podle odkazu, je vytvořen proxy, který provádí vzdálené volání objektu.Pokud objekt je zařazen podle hodnoty, serializovaná kopie objektu odeslána přes hranice relevantní.
Vzdálené komponenty, zapouzdření systémové prostředky, které jsou velké, nebo, neexistuje jako jediné instance by zařazen podle odkazu.Základní třída pro komponenty, které jsou zařazen podle odkazu je System.ComponentModel.Component.Tento základní třída implementuje IComponent a pochází z MarshalByRefObject.Mnoho součástí knihovna tříd odvodit z Component, včetně System.Windows.Forms.Control (základní třída pro ovládací prvky model Windows Forms), System.Web.Services.WebService (základní třída pro webové služby XML vytvořené pomocí ), a System.Timers.Timer (třída, která generuje opakovaných událostí).
Vzdálené komponenty, které jednoduše stisknout státu měly zařadit podle hodnoty.Základní třída pro komponenty, které jsou předávána hodnotou je System.ComponentModel.MarshalByValueComponent.Tento základní třída implementuje IComponent a pochází z Object.Pouze několik součástí knihovna tříd odvodit z MarshalByValueComponent.All such components are in the System.Data namespace (DataColumn, DataSet, DataTable, DataView, and DataViewManager).
[!POZNÁMKA]
Základní třídy pro objekty, které jsou předávána hodnotu a odkazů jsou Object a MarshalByRefObject, resp. odpovídající odvozené třídy jsou pojmenovány, ale MarshalByValueComponent a Component.Logice schéma pojmenování je, že běžně používaný typ má jednodušší název.
Pokud komponenta nebude vzdálený, není odvozena od základní implementace pro Component; místo toho implementovat IComponent přímo.
Ovládací prvek
Ovládací prvek je součást, která obsahuje (nebo povolí) možnosti uživatelského rozhraní (UI). Poskytuje dvě základní třídy prvků: jeden pro ovládací prvky model Windows Forms klienta a druhý pro ovládací prvky serveru.These are System.Windows.Forms.Control and System.Web.UI.Control.Všechny ovládací prvky knihovna tříd odvodit přímo nebo nepřímo z těchto dvou tříd.System.Windows.Forms.Controlpochází z Component a sám poskytuje funkce uživatelského rozhraní.System.Web.UI.Controlimplementuje IComponent a poskytuje infrastrukturu, na které se snadno přidat funkce uživatelského rozhraní.
[!POZNÁMKA]
Každý ovládací prvek je součástí, ale není převést hodnotu true.
Kontejner a webu
Pokud vyvíjíte komponenty a ovládací prvky pro model Windows Forms nebo pro stránky webových formulářů ( stránek), nemají implementovat kontejnerů nebo servery.Návrháři pro model Windows Forms a webových formulářů jsou kontejnery pro model Windows Forms a ovládací prvky serveru.Kontejnery poskytovat služby komponent a ovládací prvky umístěny v nich.V době návrhu ovládací prvky jsou umístěny v Návrháři a získat služby z návrháře.Pro úplnost definice kontejner a webu jsou uvedeny níže.
Container
Kontejner je třída, která implementuje System.ComponentModel.IContainer rozhraní nebo je odvozen z třídy, která implementuje rozhraní.Kontejner logicky obsahuje jednu nebo více součástí, které se nazývají podřízené součásti kontejneru.Site
Síť je třída, která implementuje System.ComponentModel.ISite rozhraní nebo je odvozen z třídy, která implementuje rozhraní.Servery jsou poskytovány kontejneru spravovat a komunikaci s jeho podřízených složek.Kontejner a web jsou obvykle implementovány jako celek.
Viz také
Koncepty
Další zdroje
Vývoj vlastní ovládací prvky model Windows Forms s.NET Framework