Devralma Temelleri (Visual Basic)

Inherits İfadesi olarak adlandırılan yeni bir sınıf bildirmek için kullanılan bir türetilmiş sınıf, olarak bilinen varolan bir sınıfa bağlı bir temel sınıf.Türetilmiş Sınıflar devralır ve genişletmek, özellikleri, yöntemleri, olayları, alanlar ve base sınıfında tanımlanmış sabitler.Aşağıdaki bölümde devralma kuralları bazıları açıklanmaktadır ve yol sınıfları değiştirmek için kullanabileceğiniz değiştiriciler devralmak veya miras:

  • Varsayılan olarak, tüm sınıfları ile işaretlenmiş sürece devralınabilir NotInheritable anahtar sözcüğü.Sınıflar, projenizi diğer sınıflarda ya da projenizin başvuran diğer derlemeler sınıflarda devralabilir.

  • Birden çok devralma izin dillerin aksine Visual Basic sınıflarda; yalnızca tek miras sağlar diğer bir deyişle, türetilmiş sınıflar yalnızca bir temel sınıfı olabilir.Birden çok devralma sınıflarda izin verilmez, ancak aynı sona etkili bir şekilde yerine getirebileceğiniz birden çok arabirim sınıflarını uygulayabilirsiniz.

  • Yasak maddeler bir taban sınıftaki çözülme önlemek için türetilmiş bir sınıf erişim türünü eşit veya onun temel sınıfı daha kısıtlayıcı olmalıdır.Örneğin, bir Public sınıf devralamaz bir Friend veya bir Private sınıfı ve bir Friend sınıf devralamaz bir Private sınıfı.

Devralma değiştiriciler

Visual Basicaşağıdaki sınıf düzeyi ifadeleri ve devralma desteklemek için değiştiriciler sunmaktadır:

  • Inheritsdeyimi — temel sınıfını belirtir.

  • NotInheritableDeğiştirici — programcılar sınıfın temel bir sınıf olarak kullanmalarını engeller.

  • MustInheritDeğiştirici — sınıfın temel bir sınıf olarak kullanılmaya yöneliktir belirtir.Örnekleri MustInherit sınıflarını doğrudan; oluşturulamıyor Bunlar, yalnızca türetilmiş bir sınıf örneklerini temel sınıf oluşturulabilir.(C++ ve C# gibi diğer programlama dilleri terimi kullanmak soyut bir sınıf bir sınıf tanımlamak için.)

Özelliklerini ve yöntemlerini türetilmiş sınıfları içinde geçersiz kılma

Varsayılan olarak, sınıfından türetilmiş bir sınıf özelliklerini ve yöntemlerini devralır.Türetilmiş bir sınıf içerisinde farklı davranmaya devralınan özellik veya yöntem varsa olabilir geçersiz kılınmış.Diğer bir deyişle, türetilmiş bir sınıf içerisinde yeni bir yöntemin uygulaması tanımlayabilirsiniz.Aşağıdaki değiştiricilerin özellikleri ve yöntemleri nasıl kılınır kontrol etmek için kullanılır:

  • Overridable— Bir sınıfın türetilmiş bir sınıfta geçersiz kılınması için bir özellik veya yöntem sağlar.

  • Overrides— Geçersiz kılmaları bir Overridable özelliğine veya yöntemine base sınıfında tanımlanmış.

  • NotOverridable— Bir özellik veya yöntem bir türetilen sınıfta geçersiz engeller.Varsayılan olarak, Public yöntemler NotOverridable.

  • MustOverride— Türetilmiş bir sınıf kıldığını özellik veya yöntem gerektirir.Zaman MustOverride anahtar sözcüğü kullanıldığında, yöntem tanımının oluşan yalnızca Sub, Function, veya Property ifadesi.Diğer deyimleri izin verilir ve özellikle yok yok End Sub veya End Function ifadesi.MustOverrideyöntemleri bildirilen, de MustInherit sınıfları.

Bordro işlemek için sınıfları tanımlamak istediğinizi varsayalım.Genel tanýmlayabilirsiniz Payroll içeren sınıf bir RunPayroll tipik bir hafta için bordro hesaplar yöntemi.Daha sonra kullanabilirsiniz Payroll daha özel için temel sınıf olarak BonusPayroll çalışan primleri dağıtma işlemi sırasında kullanılan sınıf.

BonusPayroll Sınıf devralır ve geçersiz kılma, PayEmployee Bankası ' tanımlanan yöntemi Payroll sınıfı.

Aşağıdaki örnek, bir temel sınıf tanımlar Payroll, ve türetilmiş bir sınıf BonusPayroll, geçersiz olduğu kılar miras alınan bir yöntemi PayEmployee.Yordam, bir RunPayroll, oluşturur ve sonra geçen bir Payroll nesne ve bir BonusPayroll nesnesine bir işlev Pay, yürütür, PayEmployee her iki nesnenin yöntem.

Const BonusRate As Decimal = 1.45D
Const PayRate As Decimal = 14.75D

Class Payroll
    Overridable Function PayEmployee( 
        ByVal HoursWorked As Decimal, 
        ByVal PayRate As Decimal) As Decimal

        PayEmployee = HoursWorked * PayRate
    End Function 
End Class 

Class BonusPayroll
    Inherits Payroll
    Overrides Function PayEmployee( 
        ByVal HoursWorked As Decimal, 
        ByVal PayRate As Decimal) As Decimal 

        ' The following code calls the original method in the base  
        ' class, and then modifies the returned value.
        PayEmployee = MyBase.PayEmployee(HoursWorked, PayRate) * BonusRate
    End Function 
End Class 

Sub RunPayroll()
    Dim PayrollItem As Payroll = New Payroll
    Dim BonusPayrollItem As New BonusPayroll
    Dim HoursWorked As Decimal = 40

    MsgBox("Normal pay is: " & 
        PayrollItem.PayEmployee(HoursWorked, PayRate))
    MsgBox("Pay with bonus is: " & 
        BonusPayrollItem.PayEmployee(HoursWorked, PayRate))
End Sub

MyBase anahtar sözcük

MyBase Anahtar sözcüğünü davranır gibi geçerli bir sınıfın örneğini temel sınıfına başvuran bir nesne değişkeni.MyBasesık sık, geçersiz kılınmış ya da türetilmiş bir sınıfta gölgeli temel sınıf üyesi erişmek için kullanılır.Özellikle, MyBase.New açıkça bir temel sınıf kurucusunu, türetilmiş sınıf kurucusundan çağırmak için kullanılır.

Örneğin, temel sınıfından miras alınan bir yöntemi geçersiz kılıyor türetilmiş bir sınıf tasarlarken varsayalım.Geçersiz kılınan yöntem base sınıfında yöntemini çağırın ve dönüş değeri, aşağıdaki kod parçasında gösterildiği gibi değiştirin:

Class DerivedClass
    Inherits BaseClass
    Public Overrides Function CalculateShipping( 
        ByVal Dist As Double, 
        ByVal Rate As Double) As Double 

        ' Call the method in the base class and modify the return value. 
        Return MyBase.CalculateShipping(Dist, Rate) * 2
    End Function 
End Class

Aşağıdaki liste kullanarak kısıtlamaları açıklanır MyBase:

  • MyBasehemen temel sınıf ve devralınan üyeleri gösterir.Kullanılamaz erişmek için Private sınıfındaki üye.

  • MyBasegerçek bir nesne bir anahtar sözcüktür.MyBaseedilemez bir değişkene atanabilecek, yordamlara geçirilen veya kullanılan bir Is karşılaştırma.

  • Yöntem, MyBase niteleyen hemen taban sınıfta tanımlanmış olması gerekmez Bunun yerine, dolaylı olarak devralınan bir taban sınıfta tanımlanabilir.Sırada tarafından nitelikli bir başvuru için MyBase doğru derlemek için bazı temel sınıf adı ve görünen çağrısında parametre türleri eşleşen bir yöntem içerir.

  • Kullanamazsınız MyBase çağırmak için MustOverride temel sınıfı yöntemleri.

  • MyBasekendisini alabilmek için kullanılamaz.Bu nedenle, aşağıdaki kodu geçerli değil:

    MyBase.MyBase.BtnOK_Click()

  • MyBasemodüllerde kullanılamaz.

  • MyBaseolarak işaretlenen temel sınıf üyesi erişmek için kullanılamaz Friend temel sınıf farklı bir derlemede ise.

Daha fazla bilgi ve başka bir ö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).

MyClass anahtar sözcük

MyClass Anahtar sözcüğünü davranır gibi geçerli biçimde uygulanan bir sınıf örneğine başvuruda bulunan bir nesne değişkeni.MyClassbenzer Me, ancak her yöntem ve özellik çağrısı MyClass yöntem veya özellik yokmuş gibi kabul NotOverridable (Visual Basic).Bu nedenle, yöntem veya özellik türetilmiş bir sınıfta geçersiz kılarak etkilenmez.

  • MyClassgerçek bir nesne bir anahtar sözcüktür.MyClassedilemez bir değişkene atanabilecek, yordamlara geçirilen veya kullanılan bir Is karşılaştırma.

  • MyClasskapsayan sınıfı ve devralınan üyeleri gösterir.

  • MyClassbir niteleyicisi olarak kullanılan Shared üyeleri.

  • MyClassiçinde kullanılamaz bir Shared yöntemi, ancak bir örnek yöntemi içinde paylaşılan bir sınıf üyesi erişmek için kullanılabilir.

  • MyClassStandart modüllerde kullanılamaz.

  • MyClassyöntem bir taban sınıfta tanımlanmış ve o sınıfın sağlanan yöntemin uygulaması yok olan nitelemek için kullanılır.Böyle bir başvuru aynı anlama sahip MyBase.yöntemi.

Aşağıdaki örnek karşılaştırır Me ve MyClass.

Class baseClass
    Public Overridable Sub testMethod()
        MsgBox("Base class string")
    End Sub
    Public Sub useMe()
        ' The following call uses the calling class's method, even if 
        ' that method is an override.
        Me.testMethod()
    End Sub
    Public Sub useMyClass()
        ' The following call uses this instance's method and not any
        ' override.
        MyClass.testMethod()
    End Sub
End Class
Class derivedClass : Inherits baseClass
    Public Overrides Sub testMethod()
        MsgBox("Derived class string")
    End Sub
End Class
Class testClasses
    Sub startHere()
        Dim testObj As derivedClass = New derivedClass()
        ' The following call displays "Derived class string".
        testObj.useMe()
        ' The following call displays "Base class string".
        testObj.useMyClass()
    End Sub
End Class

Olsa derivedClass geçersiz kılar testMethod, MyClass bir anahtar sözcük useMyClass temel sınıf sürümü çağrısına geçersiz kılma ve derleyici çözümler etkilerini nullifies testMethod.

Ayrıca bkz.

Başvuru

Inherits Deyimi

Kavramlar

Visual Basic'de Me, My, MyBase ve MyClass