Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
deyimiInherits, temel sınıf olarak bilinen mevcut bir sınıfı temel alarak türetilmiş sınıf olarak adlandırılan yeni bir sınıf bildirmek için kullanılır. Türetilmiş sınıflar temel sınıfta tanımlanan özellikleri, yöntemleri, olayları, alanları ve sabitleri devralır ve genişletebilir. Aşağıdaki bölümde devralma kurallarından bazıları ve sınıfların devralma veya devralma şeklini değiştirmek için kullanabileceğiniz değiştiriciler açıklanmaktadır:
Varsayılan olarak, anahtar sözcükle işaretlenmediği sürece tüm sınıflar devralınabilir
NotInheritable. Sınıflar, projenizdeki diğer sınıflardan veya projenizin başvurduğunu diğer derlemelerdeki sınıflardan devralabilir.Birden çok devralma izin dillerinden farklı olarak, Visual Basic sınıflarda yalnızca tek devralma izin verir; başka bir ifadeyle, türetilmiş sınıfların yalnızca bir temel sınıfı olabilir. Sınıflarda birden fazla kalıtıma izin verilmese de, sınıflar birden çok arayüz uygulayarak aynı amaçlara etkili bir şekilde ulaşabilir.
Bir temel sınıfta kısıtlanmış öğelerin açığa çıkmasını önlemek için, türetilmiş bir sınıfın erişim türü temel sınıfına eşit veya daha kısıtlayıcı olmalıdır. Örneğin, bir
Publicsınıf veyaFriendPrivatesınıfını devralamaz ve sınıfFriendbirPrivatesınıfı devralamaz.
Devralma Değiştiricileri
Visual Basic devralmayı desteklemek için aşağıdaki sınıf düzeyinde deyimleri ve değiştiricileri tanıtır:
Inheritsdeyimi — Temel sınıfı belirtir.NotInheritablemodifier — Programcıların sınıfı temel sınıf olarak kullanmasını engeller.MustInheritmodifier — Sınıfın yalnızca temel sınıf olarak kullanılmak üzere tasarlandığını belirtir. SınıflarınMustInheritörnekleri doğrudan oluşturulamaz; bunlar yalnızca türetilmiş bir sınıfın temel sınıf örnekleri olarak oluşturulabilir. (C++ ve C# gibi diğer programlama dilleri, böyle bir sınıfı tanımlamak için soyut sınıf terimini kullanır.)
Türetilmiş Sınıflarda Özellikleri ve Yöntemleri Geçersiz Kılma
Varsayılan olarak, türetilmiş bir sınıf temel sınıfından özellikleri ve yöntemleri devralır. Devralınan bir özellik veya yöntemin türetilmiş sınıfta farklı davranması gerekiyorsa geçersiz kılınabilir. Diğer bir ifadeyle, türetilmiş sınıfta yönteminin yeni bir uygulamasını tanımlayabilirsiniz. Özelliklerin ve yöntemlerin nasıl geçersiz kılınmasını denetlemek için aşağıdaki değiştiriciler kullanılır:
Overridable— Bir sınıftaki bir özelliğin veya yöntemin türetilmiş bir sınıfta geçersiz kılınmasına izin verir.Overrides— Temel sınıfta tanımlanan birOverridableözelliği veya yöntemi geçersiz kılar.NotOverridable— Devralan bir sınıfta bir özelliğin veya yöntemin geçersiz kılınmasını engeller. Varsayılan olarakPublic, yöntemler şeklindedirNotOverridable.MustOverride— Türetilmiş bir sınıfın özelliği veya yöntemini geçersiz kılmasını gerektirir.MustOverrideanahtar sözcüğü kullanıldığında, yöntem tanımı yalnızca ,SubveyaFunctiondeyimindenPropertyoluşur. Başka deyimlere izin verilmez ve özellikleEnd SubveyaEnd Functiondeyimi yoktur.MustOverrideyöntemleriMustInheritsınıflarında bildirilmelidir.
Bordro yönetimi için sınıflar tanımlamak istediğinizi varsayalım. Tipik bir hafta için bordro hesaplayan bir Payroll yöntem içeren genel RunPayroll bir sınıf tanımlayabilirsiniz. Daha sonra, çalışan bonusları dağıtırken kullanılabilecek daha özel Payroll bir sınıf için temel sınıf olarak kullanabilirsinizBonusPayroll.
BonusPayroll sınıfı, temel PayEmployee sınıfta tanımlanan yöntemi devralabilir ve geçersiz kılabilirPayroll.
Aşağıdaki örnek, Payrolldevralınan bir yöntemi BonusPayrollgeçersiz kılan bir temel sınıfı , ve türetilmiş bir sınıfı PayEmployeetanımlar. Bir prosedür RunPayroll, Payroll nesnesi ve BonusPayroll nesnesi oluşturur ve bunları her iki nesnenin de PayEmployee yöntemini yürüten bir işleme, Pay, geçirir.
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üğü
MyBase anahtar sözcüğü, bir sınıfın geçerli örneğinin temel sınıfına başvuran bir nesne değişkeni gibi davranır.
MyBase genellikle türetilmiş bir sınıfta geçersiz kılınan veya gölgelenen temel sınıf üyelerine erişmek için kullanılır. Özellikle, MyBase.New, türetilmiş bir sınıf yapıcısından açıkça bir temel sınıf yapıcısını çağırmak için kullanılır.
Örneğin, temel sınıftan devralınan bir yöntemi geçersiz kılan türetilmiş bir sınıf tasarladığını varsayalım. Geçersiz kılınan yöntem, temel sınıfta yöntemini çağırabilir ve aşağıdaki kod parçasında gösterildiği gibi dönüş değerini değiştirebilir:
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 listede, kullanımıyla MyBaseilgili kısıtlamalar açıklanmaktadır:
MyBase, anlık temel sınıfı ve devralınan üyelerini ifade eder.Privatesınıfındaki üyelere erişmek için kullanılamaz.MyBasebir anahtar sözcüktür, gerçek bir nesne değildir.MyBasebir değişkene atanamaz, yordamlara geçirilemez veya karşılaştırmadaIskullanılamaz.Niteleyen yöntemin
MyBasehemen temel sınıfta tanımlanması gerekmez; bunun yerine dolaylı olarak devralınan bir temel sınıfta tanımlanabilir. tarafından nitelenenMyBasebir başvurunun doğru derlenmesi için, bazı temel sınıfın çağrıda görünen parametre adı ve türleriyle eşleşen bir yöntem içermesi gerekir.MyBase'ü,MustOverridetemel sınıf metotlarını çağırmak için kullanamazsınız.MyBasekendisini niteleme amacıyla kullanılamaz. Bu nedenle, aşağıdaki kod geçerli değildir:MyBase.MyBase.BtnOK_Click()MyBasemodüllerde kullanılamaz."
MyBasefarklı bir derlemede bulunan temel sınıf üyeleriFriendişaretlenmişse erişim için kullanılamaz."
Daha fazla bilgi ve başka bir örnek için Türetilmiş Bir Sınıf Tarafından Gizlenmiş Bir Değişkene Nasıl Erişilir bölümüne bakın.
MyClass Anahtar Sözcüğü
MyClass anahtar sözcüğü, başlangıçta uygulanmış haliyle bir sınıfın geçerli örneğine başvuran bir nesne değişkeni gibi davranır.
MyClass
Me öğesine benzer, ancak MyClass üzerindeki her yöntem ve özellik çağrısı, yöntem veya özellik NotOverridable olarak değerlendirilir. Bu nedenle, yöntem veya özellik türetilmiş bir sınıfta geçersiz kılma tarafından etkilenmez.
MyClassbir anahtar sözcüktür, gerçek bir nesne değildir.MyClassbir değişkene atanamaz, yordamlara geçirilemez veya karşılaştırmadaIskullanılamaz.MyClassiçeren sınıfı ve türeyen üyeleri ifade eder.MyClassüyeler içinSharedniteleyici olarak kullanılabilir.MyClassbirSharedyöntemin içinde kullanılamaz, ancak bir sınıfın paylaşılan üyesine erişmek için bir örnek yöntemi içinde kullanılabilir.MyClassstandart modüllerde kullanılamaz.MyClassbir temel sınıfta tanımlanan ve bu sınıfta sağlanan yöntemin uygulaması olmayan bir yöntemi nitelemek için kullanılabilir. Böyle bir başvuru Method ile aynı anlamaMyBase.sahiptir.
Aşağıdaki örnek Me ve MyClass karşılaştırır.
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
derivedClass
testMethod'i geçersiz kılmış olsa bile, useMyClass içindeki MyClass anahtar sözcüğü, geçersiz kılmanın etkilerini iptal eder ve derleyici çağrıyı temel sınıfın testMethod sürümüne yönlendirir.