Sınıf vs. Bileşen vs. Denetim
Bu konuda, bileşen ve Denetim tanımlar; Burada sunulan tartışma bir bileşeni veya denetimi sınıfı uygulamak ne zaman karar vermenize yardımcı olması.
[!NOT]
Bu, Windows Forms ve ASP sınıfları hakkında konudur.Bu tartışma değil wpf sınıfları wpf denetimleri geliştirme hakkında bilgi için uygulama, bkz: Denetim Yazımına Genel Bakış.
Aşağıdaki liste, uygulayıcıları için geniş yönergeleri sağlar.
Sınıfınızın dış kaynak kullanan, ancak Tasarım yüzeyi üzerinde kullanılmayacak uygulayan System.IDisposable, ya da doğrudan veya dolaylı olarak uygulayan bir sınıf türetin IDisposable.
Sınıfınızın (örneğin, Windows Forms ya da Web Forms designer) tasarım yüzeyi üzerinde kullanılması durumunda, uygulamanız System.ComponentModel.IComponent, ya da doğrudan veya dolaylı olarak uygulayan bir sınıf türetin IComponent.Dikkat IComponent genişleten IDisposable, böyle bir IComponent türüdür, her zaman bir IDisposable türü.Bir IComponent türüne sahip küçük bir performans ek yükünü üzerinden bir IDisposable olmayan türü bir IComponent, ancak bu genellikle site özelliği tarafından mahsup edilen bir IComponent tasarım zamanı sırasında ve çalışma zamanında.(Siting bu konunun ilerisinde açıklanmıştır.)
Designable (Tasarım yüzeyi üzerinde kullanılır) ve başvuruya göre sıralanmış bir sınıf istiyorsanız, gelen türetebilirsiniz System.ComponentModel.Component.Componenttemel uygulaması olan bir IComponent başvuruya göre sıralanmış türü.
Değerine göre sıralanmış designable bir sınıf istiyorsanız, gelen türetebilirsiniz System.ComponentModel.MarshalByValueComponent.MarshalByValueComponenttemel uygulaması olan bir IComponent değerine göre sıralanmış türü.
Tanıtmak istiyorsanız bir IComponent nesne modeli hiyerarşisinde yazın ve aşağıdaki gibi temel bir uygulamadan diğerine türetilemez Component veya MarshalByValueComponent tek miras uygulayan IComponent.
Bir kullanıcı arabirimi sağlayan bir designable sınıf istiyorsanız, Sınıfınızın bir denetimdir.Bir denetime doğrudan veya dolaylı olarak temel denetim sınıflarından birini türetilmesi gerekir: System.Windows.Forms.Control veya System.Web.UI.Control.
[!NOT]
Sınıfınızın ne ise, designable, ne de dış kaynaklara tutan gereksiniminiz olmayan bir IComponent veya bir IDisposable türü.
Bileşeni, Denetim, kapsayıcı ve site tanımları izleyin.
Bileşen
De .NET Framework, bir bileşenidir uygulayan bir sınıf System.ComponentModel.IComponent arabirimi veya uygulayan bir sınıftan türer doğrudan veya dolaylı olarak IComponent.Programlamada, terim bileşeni genellikle nesnenin diğer nesnelerle etkileşim kurabilir ve yeniden kullanılır.A .NET Framework bileşen bu genel gereksinimlerini karşılar ve ayrıca denetim dış kaynaklar ve tasarım zamanı desteği gibi özellikler sağlar.
Dış kaynaklar üzerinde denetimi
IComponent Arabirimi genişletiyor IDisposable adlı bir yöntemi olan arabirim Dispose , sözleşmede.Kendi uygulamasında Dispose yöntemi, bir bileşeni dış kaynaklar açıkça bırakmalıdır.Bu çöp toplama olacağını varsayılan FUNCTION temizleme tersine Kaynakları boşaltmak için deterministik bir yol sağlar.Geliştiriciler gerekir yay Disposeçocuklar bir bileşenin de kaynakları serbest olduğundan emin olmak için bir içerik hiyerarşisi boyunca.Ayrıca, bir türetilmiş bileşen çağırmanız gerekir Dispose , temel sınıf yöntemi.
[!NOT]
Açık kaynaklar kontrolünü sağlamak ne zaman bile Dispose, her zaman kullanıcının çağrı başarısız olursa kalıcı olarak sızıntı kaynakları önlemek için sonlandırıcıyı (yıkıcı) aracılığıyla örtülü temizleme sağlamalıdır Dispose bileşeninizin üzerinde.
Desen uygulamak için aşağıdaki örnekte gösterildiği Dispose temel bir bileşenidir ve türetilmiş bir bileşen.
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
Tasarım zamanı desteği
Önemli bir özelliği Bileşenleri'nde, .NET Framework bir bileşen sınıfının hızlı uygulama geliştirme (rad) ortamında aşağıdaki gibi kullanılabileceğini anlamına gelir designable, olmalarını kapsayacaktır Visual Studio.Bir bileşen araç kutusu eklenebilir Visual Studio, sürüklenip bir forma ve tasarım yüzeyi üzerinde hareket ettirilebilen.Temel tasarım zamanı desteği için Not IComponent türleri yerleşik .NET Framework; Bileşen Geliştirici temel tasarım zamanı işlevsellikten yararlanmak için herhangi bir ek iş yapmak zorunda değil.
Tasarım zamanı desteği hakkında daha fazla bilgi için bkz: Tasarım zamanı öznitelikleri bileşenleri ve Tasarım zamanı desteği genişletme.
Bir bileşeni barındıran
Bir bileşeni (bu konunu sonraki bölümlerinde tanımlanan) kapsayıcısında (barındırılan) tarihli.Bir bileşen tarihli zaman konteyner (bu konunu sonraki bölümlerinde tanımlanan) kendi sitesi üzerinden etkileşim ve sorgulamak ve Hizmetleri site konteynerinden yeteneğine sahiptir.Bir kapsayıcı parçalanmış olduğunda kaynaklar serbest emin olmak için bir kapsayıcı uygulamalıdır IDisposable arabirimi.Kendi uygulamasında Dispose yöntemi, bir kapsayıcı olmalıdır, taşıdığı tüm kaynakları serbest ve harekete geçirmek Dispose yöntemi her birinin kendi içerilen bileşenler.
İçerik mantıksal ve görsel bir temsilini olması gerekmez.Veritabanı bileşenleri siteleri bir Orta Bağlayıcıya konteyner nonvisual kapsayıcı bir örnektir.Windows Forms tasarýmcýsý ve Web Forms tasarýmcýsý içinde görsel içerik görülen Visual Studio.Görsel tasarım yüzeyine (Web formlarındaki, sayfa bileşeni) form bileşeni barındıran bir kapsayıcıdır.
Bir bileşen sıralaması
Bileşenleri uzaktan yönetilebilir veya nonremotable olabilir.Uzaktan erişilebilir bileşenler başvuruya veya değere göre sıralanmış.Sıralama ilgilidir nesneleri gibi sınırları boyunca gönderme Uygulama etki alanları (Hafif işlemleri) işlemleri ve hatta makineler.Bir nesneyi başvuruya göre sıralanmış, bir proxy nesnesi uzak çağrıları yapan oluşturulur.Değerine göre sıralandığında, bir nesnenin nesne seri hale getirilmiş bir kopyası ilgili sınırı boyunca gönderilir.
Uzaktan erişilebilir bileşenler büyük veya başvuruya göre tek örneklerini konmasını gibi mevcut sistem kaynaklarını kapsayan.Başvuruya göre sıralanmış bileşenler için taban sınıftır System.ComponentModel.Component.Bu temel sınıf uygulayan IComponent ve türetildiği MarshalByRefObject.Bileşenlerinin çoğunun .NET Framework sýnýf kitaplýðý türetmek Componentdahil, System.Windows.Forms.Control (Windows Forms denetimleri için temel sınıf) System.Web.Services.WebService (kullanılarak oluşturulan xml Web hizmetlerinin temel sınıf ASP.NET), ve System.Timers.Timer (yinelenen olaylara üreten bir sınıf).
Sadece durumu basılı Uzaktan erişilebilir bileşenler değerine göre sıralanmış.Değerine göre sıralanmış bileşenler için taban sınıftır System.ComponentModel.MarshalByValueComponent.Bu temel sınıf uygulayan IComponent ve türetildiği Object.Yalnızca birkaç bileşenleri .NET Framework sýnýf kitaplýðý türetmek MarshalByValueComponent.All such components are in the System.Data namespace (DataColumn, DataSet, DataTable, DataView, and DataViewManager).
[!NOT]
Base classes değeri ve başvuru göre sıralanmış nesneler için Object ve MarshalByRefObject, sırasıyla, ancak karşılık gelen türetilmiş sınıflar adlı MarshalByValueComponent ve Component.Adlandırma düzeni arkasındaki mantığa daha yaygın olarak kullanılan tür basit ad olmasıdır.
Bir bileşen düğümlerde olmayacak, temel uygulamaları için gelen türevi değil Component; Bunun yerine, çözümü IComponent doğrudan.
Denetim
Denetim, kullanıcı arabirimi (UI) yetenekleri sağlar (veya etkinleştirir) bir bileşendir..NET Framework İki temel sınıflar denetimleri sağlar: biri istemci tarafı Windows Forms denetimleri ve diðer ASP.NET sunucu denetimleri.These are System.Windows.Forms.Control and System.Web.UI.Control.Tüm denetimlerin de .NET Framework sınıf kitaplığı bu iki sınıftan türemesine doğrudan veya dolaylı olarak.System.Windows.Forms.Controltüretildiği Component ve kendisini UI yetenekleri sağlar.System.Web.UI.Controluygulayan IComponent ve onu olduğu kullanıcı Arabirimi işlevselliği eklemek kolay bir altyapı sağlar.
[!NOT]
Her denetim bir bileşenidir, ancak converse doğru değil.
Kapsayıcı ve Site
Bileşenleri ve denetimleri Windows Forms ya da Web formları sayfalarını geliştiriyorsanız (ASP.NET sayfalar), kapsayıcı veya sitelere uygulamak zorunda değilsiniz.Windows Forms ve Web Forms tasarımcıları ve Windows Forms için kaplardır ASP.NET sunucu denetimleri.Kapsayıcılar bileşenleri ve denetimleri içinde bunları tarihli hizmetleri sağlamak.Tasarım zamanında denetimleri Tasarımcısı'nda tarihli ve Hizmetleri Tasarımcısı'ndan elde edilir.Eksik kalmaması açısından bir kapsayıcı ve site tanımları aşağıda verilmiştir.
Container
Bir kapsayıcıdır uygulayan bir sınıf System.ComponentModel.IContainer arabirim veya bu arabirimi uygulayan bir sınıftan türer.Bir kapsayıcı mantıksal olarak konteynerin alt bileşenler olarak adlandırılan bir veya daha fazla bileşen içerir.Site
Bir site uygulayan bir sınıf olan System.ComponentModel.ISite arabirim veya bu arabirimi uygulayan bir sınıftan türer.Siteleri yönetme ve alt bileşenleriyle iletişim kurmak için bir kapsayıcı tarafından sağlanmıştır.Genellikle, bir konteyner ve bir site bir birim olarak uygulanır.
Ayrıca bkz.
Kavramlar
Tasarım zamanı öznitelikleri bileşenleri
Diğer Kaynaklar
Özel Windows Forms denetimleri ile geliştirmek.net Framework