Nesne Ömrü: Nesneleri Oluşturma ve Yok Etme (Visual Basic)
Bir nesne bir sınıfının bir örneği kullanılarak oluşturulan New anahtar sözcük.Kullanmadan önce başlatma görevlerini genellikle yeni nesneler üzerinde gerçekleştirilmelidir.Veritabanlarına bağlanmak ve kayıt defteri anahtarları değerleri okumaya dosya açma ortak başlatma görevleri içerir.Visual Basic denetler çağrılır yordamları kullanarak yeni nesneler başlatma Oluşturucular (başlatma üzerinde denetime izin veren özel yöntemleri).
Bir nesne kapsam bırakır sonra ortak dil çalışma zamanı tarafından (CLR) serbest.Visual Basic denetimleri, sistem kaynaklarının çağrılır yordamları kullanarak sürüm Yıkıcılar.Birlikte oluşturucular ve yok ediciler güçlü ve tahmin edilebilir sınıfı kitaplıklar oluşturmayı destekler.
Oluşturucular ve yok ediciler kullanma
Oluşturucular ve yok ediciler oluşturma ve nesneleri edilmesine denetler.Sub New Ve Sub Finalize yordamları Visual Basic'te başlatmak ve nesneleri yok; bunlar yerini Class_Initialize ve Class_Terminate kullanılan yöntemleri Visual Basic 6.0 ve daha önceki sürümleri.
Sub New
Sub New Oluşturucu yalnızca bir sınıf oluşturulduğunda bir kez çalıştırılabilir.Dışında herhangi bir yeri açıkça çağrılamaz ilk satırında aynı sınıfından veya türetilen bir sınıftan başka bir oluşturucu kodu.Ayrıca, koddaki Sub New yöntemi her zaman çalıştırılmadan önce başka bir kod sınıfı.Visual Basic 2005 ve sonraki sürümler örtülü olarak oluşturun bir Sub New Oluşturucu değil açıkça tanımladığınız, çalışma zamanında bir Sub New yordam için bir sınıf.
Bir sınıf için bir kurucu oluşturmak için adlandırılmış bir yordam oluşturmak Sub New herhangi bir sınıf tanımında.Parametreleştirilmiş Oluşturucu oluşturmak için bağımsız değişken adları ve veri türlerini belirtin Sub New gibi herhangi diğer bir yordam, aşağıdaki kod olduğu için bağımsız değişken belirtmeniz gerekir:
Sub New(ByVal s As String)
Oluşturucu sık, aşağıdaki kod olduğu gibi aşırı:
Sub New(ByVal s As String, i As Integer)
Başka bir sınıfından türetilen bir sınıfı tanımlar, temel sınıf parametresiz alan erişilebilir bir oluşturucu olmadıkça bir oluşturucu ilk satırını oluşturucu temel sınıfın bir çağrı olması gerekir.Örneğin, yukarıdaki oluşturucu içeren temel sınıfı için bir çağrı olabilir MyBase.New(s).Aksi takdirde MyBase.New isteğe bağlıdır ve Visual Basic çalışma zamanı çağırır, dolaylı olarak.
Üst nesnenin oluşturucuyu çağırmak için kod yazma sonra herhangi bir ek başlatma kod ekleyebilirsiniz Sub New yordam.Sub New bağımsız değişken parametreleştirilmiş bir oluşturucu çağrıldığında kabul edebilir.Bu parametreleri Oluşturucu çağırarak yordamdan geçirilen Dim AnObject As New ThisClass(X).
Sub sonuçlandır
CLR nesneleri bırakmadan önce otomatik olarak çağırır Finalize yöntemi tanımlayan nesneleri için bir Sub Finalize yordam.Finalize Yöntemi yalnızca bir nesne, dosyaları kapatma ve durum bilgilerini kaydetme için kod gibi yok edilmeden yürütmek için gereken kod içerebilir.Bulunmaktadır yürütme küçük bir performans Sub Finalize, bu nedenle, tanımladığınız bir Sub Finalize nesneleri açıkça sürüm gerektiğinde yöntemi.
[!NOT]
Atık toplayıcının CLR'de elden yoktur ve olamaz yönetilmeyen nesneleri, işletim sistemi doğrudan CLR ortam dışında yürüten nesneleri.Farklı yönetilmeyen nesneleri, farklı şekillerde çıkarılması gereken olmasıdır.Bu bilgileri doğrudan yönetilmeyen nesnesiyle ilişkili değil; nesne için belgelerinde bulunması gerekir.Yönetilmeyen nesneleri kullanan bir sınıfı bunları elden gerekir, Finalize yöntemi.
Finalize Yok edici yalnızca ait olduğu sınıfın veya türetilen sınıfların çağrılabilen bir yöntemdir korumalı.Sistem çağrıları Finalize otomatik olarak ne zaman bir nesne bozulur, açıkça arama şekilde Finalize öğesinden türetilen sınıf dışında Finalize uygulaması.
Farklı olarak Class_Terminate, bir nesne nothing değerine ayarlanmış olarak yürütür olduğunda, genellikle bir nesne kapsamı olduğunda kaybeder ve Visual Basic olduğunda çağırır arasında gecikme Finalize yok edici.Visual Basic 2005 ve sonraki sürümler izin yok edici, ikinci bir tür için Dispose, hangi açıkça çağrılabilir hemen kaynakları serbest bırakmak için dilediğiniz zaman.
[!NOT]
Bir Finalize yok edici değil durum özel durumları, çünkü bunlar uygulama tarafından işlenen ve için uygulamanın neden olabilir.
Yeni ve sınıf hiyerarşisinin yöntemleri işinde sonuçlandır
Her bir sınıfının bir örneği oluşturulduğunda, ortak dil çalışma zamanı (CLR) adında bir yordamı yürütmeyi denediğinde New, o nesnenin varsa.New çağrılan yordam türünde bir constructor herhangi bir nesneyi kodda yürütülmeden önce yeni nesneler başlatmak için kullanılır.Bir New Oluşturucu dosyaları açmak, veritabanlarına bağlanmak, değişkenlerini Başlat ve bir nesne kullanılmadan önce yapılması gereken diğer görevler halletmeniz için kullanılabilir.
Türetilen bir sınıfı örneği oluşturulduğunda, Sub New temel sınıfın Oluşturucusu yürütülmeden önce türetilmiş sınıflardaki izlediği.Çünkü böyle kodda ilk satırını bir Sub New Oluşturucu sözdizimini kullanan MyBase.New()sınıf hiyerarşisinde sınıfının kendisi üzerinde hemen oluşturucuyu çağırmak için.Sub New Oluşturucu sonra çağrılır sınıf hiyerarşisinin her sınıf için kadar Oluşturucu için temel sınıf ulaşıldı.Bu noktada yürütür temel sınıfı için kod oluşturucu içinde tüm türetilen sınıfların her oluşturucuda kod tarafından izlenen ve kod en türetilmiş sınıflardaki son yürütülür.
Bir nesne artık gerektiğinde CLR çağırır Finalize kendi bellek boşaltma önce bu nesne için yöntem.Finalize Yöntemi çağrıldığında bir destructor durum bilgilerini kaydetme gibi temizleme görevleri gerçekleştirir olduğundan dosyaları ve bağlantıları veritabanlarını ve nesne bırakmadan önce gerçekleştirilmesi gereken diğer görevlere kapatma.
IDisposal arabirimi
Sınıf örneklerinin genellikle Windows işleyen ve veritabanı bağlantıları gibi CLR tarafından yönetilmediğini kaynakları denetler.Bu kaynakları, içinde atıldı gerekir Finalize yöntemi sınıfının, böylece nesne tarafından atık toplayıcının kaldırıldığı zaman bunlar yayımlanacak.Ancak, yalnızca CLR daha fazla boş bellek gerektirdiğinde atık toplayıcının nesneleri yok eder.Bu nesne kapsamı dışında uzun süre geçtikten sonra kaynakları kadar yayımlanabilir değil, anlamına gelir.
Atık toplama tamamlamak için sınıfları bunlar uygulayan sistem kaynaklarını etkin bir şekilde yönetmek için bir mekanizma sağlar IDisposable arabirimi.IDisposable bir yöntem olan Dispose, hangi istemcilerin bir nesnesini kullanmayı bitirdiğinizde çağırın.Kullanabileceğiniz Dispose hemen kaynakları serbest bırakmak ve dosyaları kapatma gibi görevleri gerçekleştirmek ve bağlantıları veritabanı yöntemi.Farklı olarak Finalize yok edici, Dispose yöntemi otomatik olarak çağrılmaz.Bir sınıf istemcileri açıkça çağırmalıdır Dispose hemen kaynakları serbest bırakmak istediğinizde.
IDisposable uygulama
Uygulayan bir sınıf IDisposable arabirimi, bu kodun bölümleri içermelidir:
Nesne atıldı olup olmadığını izlemek için bir alan:
Protected disposed As Boolean = False
Bir aşırı yüklemesini Dispose sınıfın kaynakları serbest bırakır.Bu yöntem çağrılmalı Dispose ve Finalize temel sınıfı yöntemlerinin:
Protected Overridable Sub Dispose(ByVal disposing As Boolean) If Not Me.disposed Then If disposing Then ' Insert code to free managed resources. End If ' Insert code to free unmanaged resources. End If Me.disposed = True End Sub
Uygulaması Dispose yalnızca aşağıdaki kodu içeren:
Public Sub Dispose() Implements IDisposable.Dispose Dispose(True) GC.SuppressFinalize(Me) End Sub
Geçersiz kılma Finalize yalnızca aşağıdaki kodu içeren yöntemi:
Protected Overrides Sub Finalize() Dispose(False) MyBase.Finalize() End Sub
IDisposable uygulayan bir sınıf türetme
Arabirimini uygulayan bir taban sınıfından türetilen sınıfı IDisposable çıkarılması gereken ek kaynaklar kullandığı sürece temel yöntemleri geçersiz kılmak arabirim gerekmez.Bu durumda, temel sınıfın türetilmiş sınıf geçersiz kılmalısınız Dispose(disposing) türetilen sınıfın kaynaklarını silmek için yöntem.Bu temel sınıfın çağırmalıdır Dispose(disposing) yöntemi.
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
If Not Me.disposed Then
If disposing Then
' Insert code to free managed resources.
End If
' Insert code to free unmanaged resources.
End If
MyBase.Dispose(disposing)
End Sub
Türetilen bir sınıfı temel sınıfın üzerine yazması gerekir değil Dispose ve Finalize yöntemleri.Türetilen sınıfın örneğini bu yöntemi çağrıldığında, temel sınıfın uygulamayı bu yöntemlerin çağırması türetilen sınıfın geçersiz kılma Dispose(disposing) yöntemi.
Atık toplama ve yok edici sonuçlandır
.NET Framework Kullanan başvuru izleme atık toplama düzenli aralıklarla kullanılmayan kaynakları serbest bırakmak için sistem.Visual Basic 6.0 ve önceki sürümlerinde kullanılan çağrılır farklı bir sistemi başvuru sayımı kaynaklarını yönetmek için.Her iki sistem aynı işlevi otomatik olarak gerçekleştirilecek olsa da, birkaç önemli farklılıkları vardır.
Bu tür nesneler artık gerekli sistem belirlediğinde CLR düzenli aralıklarla nesneleri yok eder.Sistem kaynaklarını kısa kaynağı ve seyrek Aksi durumda olduğunda nesneler daha hızlı bırakılır.Bir nesne kapsamı olduğunda kaybeder ve ne zaman CLR bırakması arasındaki gecikme farklı olarak, Visual Basic 6.0 ve önceki sürümlerinde, nesnelerle, tam olarak ne zaman nesnesinin yok belirlenemiyor, anlamına gelir.Bu tür bir durumda nesneleri sahip söylenir kararlı olmayan bir kullanım ömrü.Anımsa sürece çoğu durumda, kararlı olmayan bir kullanım ömrü uygulamalar, yazma biçimini değiştirmez Finalize yok edici değil hemen çalıştırılacak bir nesne kapsam kaybettiğinde.
Atık toplama sistemleri arasındaki başka bir fark kullanımını içerir Nothing.Atanan bazen Programcı Başvurusu Visual Basic 6.0 ve önceki sürümlerinde sayım yararlanmak için Nothing değişkenleri başvurular serbest bırakmak için değişkenleri nesnesi için tutulur.Son nesne başvurusu değişkenin tutulan, nesnenin kaynakları hemen yayımlanmıştır.Olsa da bu yordamı yine de değerli olduğu durumlarda Visual Basic sonraki sürümlerinde, gerçekleştirme hiçbir zaman hemen kaynaklarını serbest bırakmak başvurulan nesne neden olur.Hemen kaynakları serbest bırakmak için nesnenin kullanmak Dispose yöntemi, varsa.Yalnızca bir değişken ayarlamalıdır Nothing ömrü atık toplayıcının artık nesneleri algılamak için süresini için göreli uzun olduğunda.
Ayrıca bkz.
Başvuru
Kavramlar
Bileşenleri Başlatma ve Sonlandırma