Sdílet prostřednictvím


Třída vs. komponenta 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 řízeného vytváření.

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 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), 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 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 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: Control nebo 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 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 doby návrhu pro komponenty a Rozšíření podpory během 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 Aplikační domény (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 Component.Tento základní třída implementuje IComponent a pochází z MarshalByRefObject.Mnoho součástí knihovna tříd odvodit z Component, včetně Control (základní třída pro ovládací prvky model Windows Forms), WebService (základní třída pro webové služby XML vytvořené pomocí ), a 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 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 Control and Control.Všechny ovládací prvky knihovna tříd odvodit přímo nebo nepřímo z těchto dvou tříd.Controlpochází z Component a sám poskytuje funkce uživatelského rozhraní.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 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 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

Přehled vlastností

Atributy doby návrhu pro komponenty

Další zdroje

Vývoj vlastních ovládacích prvků Windows Forms pomocí rozhraní .NET Framework

Developing Custom ASP.NET Server Controls

Rozšíření podpory během návrhu