Sdílet prostřednictvím


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.

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.

0b1dk63b.collapse_all(cs-cz,VS.110).gifOvlá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

0b1dk63b.collapse_all(cs-cz,VS.110).gifPodpora 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.

0b1dk63b.collapse_all(cs-cz,VS.110).gifHostitelem 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).

0b1dk63b.collapse_all(cs-cz,VS.110).gifSoučá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

Přehled vlastností

Atributy součástí návrhu

Další zdroje

Vývoj vlastní ovládací prvky model Windows Forms s.NET Framework

Developing Custom ASP.NET Server Controls

Rozšíření podpory návrhu