Udostępnij za pośrednictwem


Klasa vs. Składnik vs. Formant

W tym temacie opisano składnika i kontroli; dyskusji przedstawiony tu powinny pomóc zdecydować, kiedy należy zaimplementować klasę składnika lub formantu.

[!UWAGA]

Ten temat jest o Windows Forms i klas ASP.NET.Tej dyskusji nie stosuje się do klas WPF, aby uzyskać informacje dotyczące tworzenia formantów WPF, zobacz Omówienie tworzenia formantu.

Poniższa lista zawiera ogólne wytyczne dla implementacji.

Postępuj zgodnie z definicji składnika, kontroli, kontener i witryny.

Składnik

W .NET Framework, składnik jest klasa, która implementuje System.ComponentModel.IComponent interfejsu lub który pochodzi bezpośrednio lub pośrednio z klasy, który implementuje IComponent.W programowaniu składnik termin jest zazwyczaj używany dla obiektu wielokrotnego użytku i mogą współdziałać z innymi obiektami.A .NET Framework składników spełnia te wymagania ogólne i dodatkowo zapewnia funkcje, takie jak kontrolować zasoby zewnętrzne i pomoc w czasie projektowania.

0b1dk63b.collapse_all(pl-pl,VS.110).gifKontrolowanie zasobów zewnętrznych

IComponent Rozszerza interfejs IDisposable interfejs, który ma metodę o nazwie Dispose w jego umowie.W realizacji Dispose metody, składnik musi jawnie zwolnić zasoby zewnętrzne.Zapewnia to sposób deterministyczny zwolnić zasoby, w odróżnieniu od rodzaju oczyszczania domyślne, co się dzieje w kolekcji garbage.Deweloperzy muszą propagować Disposecałej hierarchii zamknięcia do zapewnienia, że dzieci składnik również zwolnić zasoby.Ponadto należy wywołać składnik pochodne Dispose metody jej klasy podstawowej.

[!UWAGA]

Nawet gdy podać jawne kontrolę nad zasobami za pośrednictwem Dispose, należy zawsze zapewniać niejawna Oczyszczanie poprzez finalizatorów (destruktora), aby uniemożliwić wyciek trwale, jeśli użytkownik nie wywołać zasobów Dispose na składnik.

Poniższy przykład pokazuje wzorzec dla wykonania Dispose w podstawowy składnik i składnik pochodnych.

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(pl-pl,VS.110).gifObsługa projektowania

Ważną cechą składników w .NET Framework to designable, co oznacza, że klasa, która jest składnikiem można w środowisku programowania (RAD) aplikacji takich jak Visual Studio.Składnik można dodać do przybornika z Visual Studio, może być przeciągany i upuszczany na formularz i może operować na powierzchni projektu.Uwaga bazowy czasu projektowania wsparcie dla IComponent typów jest wbudowana w .NET Framework; Deweloper składnika nie trzeba wykonywać żadnych dodatkowych działań, aby wykorzystać podstawowe funkcje projektowania.

Aby uzyskać informacje o pomocy technicznej w czasie projektowania, zobacz Atrybuty projektowania składników i Rozszerzenie wsparcia w czasie projektowania.

0b1dk63b.collapse_all(pl-pl,VS.110).gifObsługujący składnik

Składnik można znajdować (obsługiwanych) w kontenerze (zdefiniowaną w dalszej części tego tematu).Gdy składnik jest zlokalizowany, współdziała z kontenera za pośrednictwem jego witryny (zdefiniowaną w dalszej części tego tematu) i ma możliwość wykonywania kwerend i uzyskać usług z jego kontenera, za pośrednictwem witryny.W celu zapewnienia, że zasoby są zwalniane, gdy kontener jest programowy, kontener musi implementować IDisposable interfejsu.W realizacji Dispose metody, kontener musi zwolnić wszystkie zasoby, które posiada i wywoływać Dispose metoda poszczególne składniki zawarte.

Zamknięcia jest logiczna i nie wymagają wizualną reprezentację.Kontener średniego poziomu, który witryny składniki bazy danych jest przykładem niewizualne zamknięcia.Wizualne zamknięcia jest widoczne w projektancie Windows Forms i Projektant formularzy sieci Web w Visual Studio.Powierzchnia projektu visual jest obsługujący składnik formularza (w części strony formularzy sieci Web).

0b1dk63b.collapse_all(pl-pl,VS.110).gifKierowanie składnika

Składniki mogą być lokalnie lub nonremotable.Lokalnie składniki są organizowane przez odwołanie lub wartość.Kierowanie obejmuje wysłanie obiektów przez granice, takich jak Domen aplikacji (lekki procesy), procesy i nawet maszyny.Gdy obiekt jest organizowany przez odwołanie, tworzony jest serwer proxy, który umożliwia zdalne wywołania obiektu.Gdy obiekt jest organizowane przez wartość, szeregowana kopia obiektu jest przesyłane przez odpowiednie obramowanie.

Składniki lokalnie hermetyzowania zasobów systemowych, które są duże lub że istnieje jako odniesienia należy zorganizować pojedynczych wystąpień.Klasa bazowa dla składników, które są organizowane przez odwołanie jest System.ComponentModel.Component.Implementuje tej klasy bazowej IComponent i pochodzi od MarshalByRefObject.Wiele składników w .NET Framework Biblioteka klas pochodzić od Component, w tym System.Windows.Forms.Control (klasa bazowa dla formantów Windows Forms), System.Web.Services.WebService (klasa bazowa dla usług XML sieci Web utworzone przy użyciu ASP.NET), i System.Timers.Timer (klasa generuje zdarzenia cyklicznego).

Lokalnie składniki, które po prostu przytrzymaj Państwa powinny organizowane przez wartość.Klasa bazowa dla składników, które są organizowane przez wartość jest System.ComponentModel.MarshalByValueComponent.Implementuje tej klasy bazowej IComponent i pochodzi od Object.Tylko kilka składników w .NET Framework Biblioteka klas pochodzić od MarshalByValueComponent.All such components are in the System.Data namespace (DataColumn, DataSet, DataTable, DataView, and DataViewManager).

[!UWAGA]

Podstawy klas dla obiektów, które są organizowane przez wartość i odniesienia są Object i MarshalByRefObject, odpowiednio, ale odpowiednich klas pochodnych są o nazwie MarshalByValueComponent i Component.Logiki schemat nazewnictwa jest, że najczęściej używanych typów ma prostszej nazwy.

Jeśli składnik nie będzie zdalnym sterowaniem, pochodzi z podstawowej implementacji dla Component; Zamiast tego wykonania IComponent bezpośrednio.

Formant

Formant jest składnik, który zapewnia (lub włącza) funkcje interfejsu użytkownika (UI)..NET Framework Oferuje dwie klasy podstawowej dla formantów: jeden dla formantów Windows Forms po stronie klienta, a drugą dla ASP.NET formanty serwera.These are System.Windows.Forms.Control and System.Web.UI.Control.Wszystkie formanty w .NET Framework Biblioteka klas wynikać bezpośrednio lub pośrednio z tych dwóch klas.System.Windows.Forms.Controlpochodzi z Component i sama zapewnia funkcje interfejsu użytkownika.System.Web.UI.Controlimplementuje IComponent i zapewnia infrastrukturę, na którym jest łatwo dodać funkcjonalność interfejsu użytkownika.

[!UWAGA]

Każdy formant jest składnikiem, ale nie jest to PRAWDA.

Kontener i witryny

Jeśli składniki i formantów dla Windows Forms lub stronach formularzy sieci Web (ASP.NET stron), nie trzeba implementować pojemników lub witryn.Projektanci formularzy sieci Web i Windows Forms są kontenerami dla Windows Forms i ASP.NET formanty serwera.Pojemniki świadczenia usług składników i zlokalizowane w obrębie ich kontroli.W czasie projektowania formantów ulokowanych w projektancie i uzyskania usług z projektanta.Dla kompletności definicje kontenera i witryny są podane poniżej.

  • Container
    Kontener jest klasa, która implementuje System.ComponentModel.IContainer interfejsu lub pochodzi od klasy, która implementuje ten interfejs.Kontener logicznie zawiera jeden lub więcej składników, które są wywoływane składniki podrzędne kontenera.

  • Site
    Witryna jest klasa, która implementuje System.ComponentModel.ISite interfejsu lub pochodzi od klasy, która implementuje ten interfejs.Witryny są dostarczane przez kontener do zarządzania i komunikować się z jego elementów podrzędnych.Kontener i witryny są implementowane jako jednostka.

Zobacz też

Koncepcje

Omówienie właściwości

Atrybuty projektowania składników

Inne zasoby

Programowanie formantów Windows Forms niestandardowy z.NET Framework

Developing Custom ASP.NET Server Controls

Rozszerzenie wsparcia w czasie projektowania