Aracılığıyla paylaş


Nesne Değişken Bildirimi (Visual Basic)

Nesne değişkenlerini bildirmek için normal bir bildirim deyimi kullanırsınız. Veri türü için, nesnenin oluşturulacağı (Nesne Veri Türü) veya daha özel bir sınıf belirtirsiniz Object .

bir değişkeni olarak Object bildirmek, olarak bildirmekle System.Objectaynıdır.

Belirli bir nesne sınıfına sahip bir değişken bildirdiğinizde, bu sınıf tarafından sunulan tüm yöntemlere ve özelliklere ve devraldığı sınıflara erişebilir. ile Objectdeğişkenini bildirirseniz, geç bağlamaya izin vermediğiniz sürece Option Strict Off yalnızca sınıfın Object üyelerine erişebilir.

Bildirim Sözdizimi

Nesne değişkenini bildirmek için aşağıdaki söz dizimini kullanın:

Dim variablename As [New] { objectclass | Object }  

Bildirimde Genel, Korumalı, Arkadaş, , Protected FriendÖzel, Paylaşılan veya Statik de belirtebilirsiniz. Aşağıdaki örnek bildirimler geçerlidir:

Private objA As Object  
Static objB As System.Windows.Forms.Label  
Dim objC As System.OperatingSystem  

Geç Bağlama ve Erken Bağlama

Bazen kodunuz çalıştırana kadar belirli bir sınıf bilinmez. Bu durumda, nesne değişkenini veri türüyle Object bildirmeniz gerekir. Bu, herhangi bir nesne türüne genel bir başvuru oluşturur ve belirli sınıf çalışma zamanında atanır. Buna geç bağlama denir. Geç bağlama ek yürütme süresi gerektirir. Ayrıca kodunuzu en son atadığınız sınıfın yöntemleri ve özellikleriyle sınırlar. Kodunuz farklı bir sınıfın üyelerine erişmeye çalışırsa bu durum çalışma zamanı hatalarına neden olabilir.

Derleme zamanında belirli bir sınıfı bildiğinizde, nesne değişkenini bu sınıftan olacak şekilde bildirmeniz gerekir. Buna erken bağlama denir. Erken bağlama performansı artırır ve kodunuzun belirli sınıfın tüm yöntemlerine ve özelliklerine erişimini garanti eder. Yukarıdaki örnek bildirimlerde, değişken objA yalnızca sınıfının System.Windows.Forms.Labelnesnelerini kullanıyorsa, bildiriminde belirtmelisiniz As System.Windows.Forms.Label .

Erken Bağlamanın Avantajları

Nesne değişkenlerini belirli bir sınıf olarak bildirmek size birkaç avantaj sağlar:

  • Otomatik tür denetimi

  • Belirli sınıfın tüm üyelerine garantili erişim

  • Kod Düzenleyicisi'nde Microsoft IntelliSense desteği

  • Kodunuzun okunabilirliği iyileştirildi

  • Kodunuzda daha az hata var

  • Çalışma zamanı yerine derleme zamanında yakalanan hatalar

  • Daha hızlı kod yürütme

Nesne Değişkeni Üyelerine Erişim

dönüştürüldüyse Option StrictOn, nesne değişkeni yalnızca onu bildirdiğiniz sınıfın yöntemlerine ve özelliklerine erişebilir. Aşağıdaki örnek bunu göstermektedir.

' Option statements must precede all other source file lines.  
Option Strict On  
' Imports statement must precede all declarations in the source file.  
Imports System.Windows.Forms  
Public Sub accessMembers()  
    Dim p As Object  
    Dim q As System.Windows.Forms.Label  
    p = New System.Windows.Forms.Label  
    q = New System.Windows.Forms.Label  
    Dim j, k As Integer  
    ' The following statement generates a compiler ERROR.  
    j = p.Left  
    ' The following statement retrieves the left edge of the label in pixels.  
    k = q.Left  
End Sub  

Bu örnekte, p yalnızca özelliğini içermeyen sınıfın Object üyelerini Left kullanabilir. Öte yandan, türünde Labelolduğu bildirildi, q bu nedenle ad alanında System.Windows.Forms sınıfın Label tüm yöntemlerini ve özelliklerini kullanabilir.

Nesne Değişkenlerinin Esnekliği

Devralma hiyerarşisindeki nesnelerle çalışırken, nesne değişkenlerinizi bildirmek için hangi sınıfı kullanacağınızı tercih edebilirsiniz. Bu seçimi yaparken, nesne atama esnekliğini sınıfın üyelerine erişime karşı dengelemeniz gerekir. Örneğin, sınıfına yol açan devralma hiyerarşisini System.Windows.Forms.Form göz önünde bulundurun:

Object

  MarshalByRefObject

    Component

      Control

        ScrollableControl

          ContainerControl

            Form

Uygulamanızın sınıfından devralan adlı specialFormbir form sınıfı Formtanımladığı varsayın. Aşağıdaki örnekte gösterildiği gibi, özel olarak öğesine specialFormbaşvuran bir nesne değişkeni bildirebilirsiniz.

Public Class specialForm  
    Inherits System.Windows.Forms.Form  
    ' Insert code defining methods and properties of specialForm.  
End Class  
Dim nextForm As New specialForm  

Yukarıdaki örnekteki bildirim, değişkenini nextForm sınıfının specialFormnesneleriyle sınırlar, ancak tüm yöntemlerinin ve özelliklerinin specialForm yanı sıra devralınan tüm sınıfların specialForm tüm üyelerini de için kullanılabilir nextFormhale getirir.

Aşağıdaki örnekte gösterildiği gibi türünde olduğunu Formbildirerek bir nesne değişkenini daha genel hale getirebilirsiniz.

Dim anyForm As System.Windows.Forms.Form  

Önceki örnekteki bildirim, uygulamanızdaki herhangi bir formu öğesine anyFormatamanızı sağlar. Ancak, sınıfının Formtüm üyelerine erişebilir, ancak anyForm gibi specialFormbelirli formlar için tanımlanan ek yöntemlerden veya özelliklerden hiçbirini kullanamaz.

Bir temel sınıfın tüm üyeleri türetilmiş sınıflar için kullanılabilir, ancak türetilmiş bir sınıfın ek üyeleri temel sınıf için kullanılamaz.

Ayrıca bkz.