Aracılığıyla paylaş


Visual Basic'de Gölgeleme

İki programlama öğelerine aynı adı paylaşan, bunlardan birini gizleyebilirsiniz, veya Gölge, diğeri.Böyle bir durumda, gölgeli öğe başvurusu için kullanılamaz; Bunun yerine, kodunuzu kullandığında öğe adı Visual Basic derleyici giderir, gölgeleme öğesine.

Purpose

Gölgeleme ana amacı tanımı sınıf üyelerinizin önlemektir.Temel sınıf birini tanımlamış olduğunuz aynı ada sahip bir öğe oluşturur bir değişiklik meydana.Bu durumda, Shadows değiştirici zorlar başvuran sınıfınız için üye çözümlenmesi aracılığıyla, tanımlanmış, yerine yeni bir temel sınıf öğesi için.

Gölgeleme türleri

Bir öğeyi başka bir öğe iki farklı yolla gölge.Gölgeleme öğe geçerli bir alt bir bölgesi büyük/küçük harf gölgeleme değiştirilerek, gölgeli öğeyi içeren bölge içinde bildirilebilir kapsam ile.Deriving sınıf gölgeleme durumda yapılır bir temel sınıf üyesi tanımlayabilirsiniz veya devralma yoluyla.

Kapsam gölgeleme

Programlama öğelerine aynı modülü, sınıf veya aynı ada ancak farklı kapsam yapısı için mümkündür.İki öğe bu şekilde bildirilmiş ve kod paylaştıkları adına başvuruda bulunuyor, dar kapsamlı olan öğe öğesi gölgeleri (bloğun kapsamına ise dar).

Örneğin, bir modül tanımlayabilirsiniz bir Public adlı bir değişken temp, ve ayrıca adlı bir yerel değişken modülü bir yordamda bildirebilirsiniz temp.İçin başvuran temp içinden yordamı erişmek için başvurular sırasında yerel değişken temp gelen yordam access dışında Public değişkeni.Bu durumda, yordam değişken temp modülü değişken gölgeleri temp.

Aşağıdaki resimde iki değişkeni gösterir, hem de adlı temp.Yerel değişken temp üye değişkeni gölgeleri temp kendi yordamda erişildiğinde p.Ancak, MyClass anahtar sözcüğe gölgeleme atlar ve üye değişkeni erişir.

Kapsam gölgeleme

Kapsam yoluyla gölgelemenin grafik diyagramı

Kapsam gölgeleme örnek için bkz: Nasıl yapılır: Değişkeninizle Aynı Adı Taşıyan Bir Değişkeni Gizleme (Visual Basic).

Devralma yoluyla gölgeleme

Türetilmiş bir sınıf bir temel sınıfından miras alınan bir programlama öğesini yeniden tanımlar, özgün öğe redefining öğesi gölgeliyor.Başka bir türü ile bildirilen öðeyi her türlü veya aşırı yüklü öğeleri kümesi gölge.Örneğin, bir Integer değişken gölge bir Function yordam.Başka bir yordamda yordama gölge, farklı parametre listesi ve farklı bir dönüş türü kullanabilirsiniz.

Bir temel sınıf aşağıda gösterilmiştir b ve türetilmiş bir sınıf d , miras b.Temel sınıf adında bir yordamı tanımlar proc, ve türetilmiş bir sınıf ile aynı ada sahip başka bir yordam bunu gölgeliyor.İlk Call deyimi erişen gölgeleme proc türetilmiş bir sınıf içinde.Ancak, MyBase anahtar sözcüğünü gölgeleme atlar ve gölgeli yordamı temel sınıfta erişir.

Devralma yoluyla gölgeleme

Devralma yoluyla gölgelemenin grafik diyagramı

Devralma yoluyla gölgeleme örnek için bkz: Nasıl yapılır: Değişkeninizle Aynı Adı Taşıyan Bir Değişkeni Gizleme (Visual Basic) ve Nasıl yapılır: Devralınmış Değişkeni Gizleme (Visual Basic).

Gölgeleme ve erişim düzeyi

Gölgeleme öğe her zaman kullanarak türetilmiş bir sınıf kodu erişilebilir değil.Örneğin, onu bildirilmesi Private.Böyle bir durumda defeated gölgeleme ve derleyici sahip aynı öğe için herhangi bir başvuru çözümler bulunmamış, gölgeleme yok.Bu öğe, en derivational adımları geriye doğru gölgeleme sınıfından erişilebilir öğedir.Gölgeli bir yordam öğeyse, çözünürlüğü en yakın erişilebilir sürüm parametre listesinde aynı ada sahip olan ve dönüş türü.

Aşağıdaki örnekte, üç sınıf bir kalıtım hiyerarşisi gösterilmektedir.Her sınıf tanımlar bir Sub yordam display, türetilmiş her sınıf gölgelerde ve display temel sınıfındaki yordamı.

Public Class firstClass
    Public Sub display()
        MsgBox("This is firstClass")
    End Sub
End Class
Public Class secondClass
    Inherits firstClass
    Private Shadows Sub display()
        MsgBox("This is secondClass")
    End Sub
End Class
Public Class thirdClass
    Inherits secondClass
    Public Shadows Sub display()
        MsgBox("This is thirdClass")
    End Sub
End Class
Module callDisplay
    Dim first As New firstClass
    Dim second As New secondClass
    Dim third As New thirdClass
    Public Sub callDisplayProcedures()
        ' The following statement displays "This is firstClass".
        first.display()
        ' The following statement displays "This is firstClass".
        second.display()
        ' The following statement displays "This is thirdClass".
        third.display()
    End Sub
End Module

Önceki örnekte, türetilmiş bir sınıf secondClass gölge display ile bir Private yordam.Zaman modülü callDisplay çağrıları display , secondClass, çağıran kodun dışında kalıyor secondClass ve bu nedenle özel erişemiyor display yordam.Gölgeleme defeated ve derleyici temel sınıfın referansı çözümler display yordam.

Ancak, daha ileri türetilmiş sınıf thirdClass bildirir display olarak Public, bunu kod içinde callDisplay erişebilmesi için.

Gölgeleme ve geçersiz kılma

Geçersiz kılma içeren gölgeleme karıştırmayın.Her ikisi de, türetilmiş bir sınıf bir temel sınıftan kalıtımla alan ve her ikisi de bir başka bir bildirilen öðeyi yeniden tanımlamak kullanılır.Ancak ikisi arasında önemli farklar vardır.Bir karşılaştırma için bkz: Gölgeleme ve Geçersiz Kılma Arasındaki Farklar (Visual Basic).

Gölgeleme ve aşırı

Türetilmiş bir sınıf içerisinde birden fazla öğe ile aynı temel sınıf öğesi gölge, gölgeleme öğeleri, öğe'nın aşırı yüklü sürümlerini haline gelir.Daha fazla bilgi için bkz. Yordam Aşırı Yüklemesi (Visual Basic).

Gölgeli bir öğeye erişme

Türetilmiş sınıftan bir öğe eriştiğinizde, normalde, türetilmiş bir sınıf geçerli örneğini aracılığıyla öğe adı ile uygun olarak bunu Me anahtar sözcüğü.Temel sınıf öğesinde, türetilmiş bir sınıf gölgeleri, kendisiyle niteleme temel sınıf öğesi erişebilir MyBase anahtar sözcüğü.

Gölgeli bir öğeye erişme örnek için bkz: Nasıl yapılır: Türetilmiş Sınıf Tarafından Gizlenen Bir Değişkene Erişme (Visual Basic).

Nesne değişkeni bildirimi

Türetilmiş bir sınıf gölgeleme öğesi veya gölgeli erişir olup olmadığını nasıl nesne değişkeni oluşturmak da etkileyebilir.Aşağıdaki örnek, bir türetilmiş sınıftan iki nesne oluşturur, ancak bir nesne olarak temel bir sınıf ve türetilmiş bir sınıf olarak diğer bildirilir.

Public Class baseCls
    ' The following statement declares the element that is to be shadowed.
    Public z As Integer = 100
End Class
Public Class dervCls
    Inherits baseCls
    ' The following statement declares the shadowing element.
    Public Shadows z As String = "*"
End Class
Public Class useClasses
    ' The following statement creates the object declared as the base class.
    Dim basObj As baseCls = New dervCls()
    ' Note that dervCls widens to its base class baseCls.
    ' The following statement creates the object declared as the derived class.
    Dim derObj As dervCls = New dervCls()
    Public Sub showZ() 
    ' The following statement outputs 100 (the shadowed element).
        MsgBox("Accessed through base class: " & basObj.z)
    ' The following statement outputs "*" (the shadowing element).
        MsgBox("Accessed through derived class: " & derObj.z)
    End Sub
End Class

Önceki örnekte, değişken basObj temel sınıf olarak bildirilir.Atama bir dervCls nesnesiyle widening conversion oluşturan ve bu nedenle geçerlidir.Ancak, temel sınıf değişkeni gölgeleme sürümü erişemez z türetilmiş bir sınıf, böylece derleyici çözümler basObj.z temel sınıf değerine döndürün.

Ayrıca bkz.

Başvuru

Shadows (Visual Basic)

Geçersiz Kılmalar (Visual Basic)

Kavramlar

Bildirilmiş Öğelere Başvurular (Visual Basic)

Visual Basic'de Kapsam

Genişletme ve Daraltma Dönüşümleri (Visual Basic)

Visual Basic'de Me, My, MyBase ve MyClass

Devralma Temelleri (Visual Basic)