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 çok devralmaya izin verilmiyor olsa da, sınıflar aynı uçları etkili bir şekilde tamamlayan birden çok arabirim uygulayabilir.
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 özellikle orEnd Subdeyimi yokturEnd Function.MustOverrideyöntemleri sınıflardaMustInheritbildirilmelidir.
Bordro işleyecek 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 yordamı, RunPayrollher iki nesnenin de yöntemini yürüten Payroll bir nesnesini ve nesnesini bir işleve BonusPayrolloluşturur ve Pay geçirirPayEmployee.
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 oluşturucusundan açıkça bir temel sınıf oluşturucu ç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. Sınıfındaki üyelere erişmekPrivateiç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.Temel sınıf yöntemlerini çağırmak
MyBaseiçin kullanamazsınızMustOverride.MyBasekendisini niteleme amacıyla kullanılamaz. Bu nedenle, aşağıdaki kod geçerli değildir:MyBase.MyBase.BtnOK_Click()MyBasemodüllerde kullanılamaz.MyBasetemel sınıf farklı bir derlemede gibiFriendişaretlenmiş temel sınıf üyelerine erişmek için kullanılamaz.
Daha fazla bilgi ve başka bir örnek için bkz . How to: Access a Variable Hidden by a Derived Class.
MyClass Anahtar Sözcüğü
anahtar sözcüğü, MyClass başlangıçta uygulandığı gibi bir sınıfın geçerli örneğine başvuran bir nesne değişkeni gibi davranır.
MyClass
Meöğesine benzer, ancak üzerindeki MyClass her yöntem ve özellik çağrısı, yöntem veya özellik NotOverridable gibi 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.MyClass, içeren sınıfı ve devralınan üyelerini 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 ve Medeğerlerini karşılaştırırMyClass.
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
geçersiz kılsa derivedClasstestMethodbile, MyClass içindeki useMyClass anahtar sözcüğü geçersiz kılmanın etkilerini geçersiz kılar ve derleyici temel sınıf sürümüne testMethodyapılan çağrıyı çözümler.