Помогни ни да направим Uroci.net по - богат! Добави урок

Наследяемост (Inheritance)

bubust   трудност:    видян: 4918

Най-добрият начин за обяснение на VB .NET наследяемостта е да започнем с пример. Класовете в дадена апликация често имат родствени връзки един с друг. Да предположим, че информационната апликация за нашия Служител (Slujasht) съдържа обект Slujasht в класа CSlujasht представен в генерален аспект общ за всички служители--name, address, Zaplata и т.н.

Разбира се директорите на училището ще искат да имат различни права от тези които има секретарката. Основателно е да дефинираме допълнителни класове наречени CDirector и CSecretary, всеки със свои свойства и методи. От друга страна, директорът е служител (Slujasht), като няма причина да дефинираме две различни имена в двата случая. Неефективно е!

Ето защо е създадена наследяемастта. Първо, дефинираме класа CSlujasht, който има свойство Zaplata и метод IncZaplata:

' Slujasht class

Public Class CSlujasht

' Zaplata property е read/write

Private mdecZaplata As Decimal

Property Zaplata( ) As Decimal

Get

Zaplata = mdecZaplata

End Get

Set

mdecZaplata = Value

End Set

End Property

Public Overridable Sub IncZaplata(ByVal sngPercent As Single)

mdecZaplata = mdecZaplata * (1 + CDec(sngPercent))

End Sub

End Class

След това дефинираме класа CDirector:

' Director Class

Public Class CDirector

Inherits CSlujasht

' Calculate Zaplata нараства базирано на 5% увеличение

Overrides Sub IncZaplata(ByVal sngPercent As Single)

Me.Zaplata = Me.Zaplata * CDec(1.05 + sngPercent)

End Sub

End Class



Две неща трябва да отбележим тук. Първо реда:

Inherits CSlujasht

индикира, че класа CDirector наследява (inherits) членовете на класа CSlujasht. Обект от клас CDirector е обект и от тип CSlujasht. Ако дефинираме обект от тип CDirector:

Dim ceo As New CDirector

след това можем да извикаме свойство Zaplata, така:

ceo.Zaplata = 1000

Второ, ключовата дума Overrides в метод IncZaplata означава, че изпълнението на IncZaplata в CDirector е извикано наместо изпълнението в CSlujasht. Така че кодът:

ceo.IncZaplata

касае заплатата в обекта CDirector ceo базирана на пренасянето на разрешение. Присъствието на ключова дума Overridable в дефиницията на IncZaplata в класа CSlujasht, спесифицира, че класът наследяващ от базовия клас е допуснат да предефинира - override метода на базовия клас.

След това, дефинираме класа CSecretary, който също наследява от CSlujasht но изпълнява различно нарастване на заплатата за обект секретарка:

' Secretary Class - на секретарката

Public Class CSecretary

Inherits CSlujasht

' секретарките вземат 2%

Overrides Sub IncZaplata(ByVal sngPercent As Single)

Me.Zaplata = Me.Zaplata * CDec(1.02 + sngPercent)

End Sub

End Class

Сега можем да напишем код за упражнение на тези класове:

Dim ThePrincipal As New CDirector( )

Dim MySecretary As New CSecretary( )

' Set заплащане

ThePrincipal.Zaplata = 1000

MySecretary.Zaplata = 300

' Set Slujasht - Principal и incZaplata

Debug.Writeline("Principal before: " & CStr(ThePrincipal.Zaplata))

ThePrincipal.IncZaplata(0.4)

Debug.WriteLine("Principal after: " & CStr(ThePrincipal.Zaplata))

' Set Slujasht - Principal и inc Zaplata

Debug.Writeline("Principal before: " & CStr(ThePrincipal.Zaplata))

ThePrincipal.IncZaplata(0.4)

Debug.WriteLine("Principal after: " & CStr(ThePrincipal.Zaplata))

' Set Slujasht - Secretary и inc Zaplata

Debug.Writeline("Secretary before: " & CStr(MySecretary.Zaplata))

MySecretary.IncZaplata(0.4)

Debug.WriteLine("Secretary after: " & CStr(MySecretary.Zaplata))



Изходът в този случай е:

Principal before: 1000

Principal after: 1450

Secretary before: 300

Secretary after: 396

Можем да кажем следното за наследяемостта:

Ако клас B наследява от клас A, тогава всеки обект от клас B е също обект и от клас A и включва публични (public) свойства и методи (това е публичния интерфейс) на клас A. В този случай, клас A се нарича базов клас (base class), а клас B се нарича произхождащ клас (derived class). От друга страна, произхождащият клас може да предефинира (override) изпълнението на членове на базовия клас за собствени нужди.

Наследяването се изпълнява посредством ключова дума Inherits.

Ако трябва да дадем кратка дефиниция, наследяемостта е възможност нов клас да произхожда (наследява) от по-прост клас (базов клас - base class).

Произхождащият клас (derived class) наследява всички полета (fields), свойства (properties), и методи (methods) на базовия клас и може да модифицира поведението на всички тези свойства и методи на базовия клас чрез предефинирането им (overriding). А вие разбира се може да добавяте нови полета, свойства и методи към наследяващия клас (inherited class).



Страници: 1 2 »

Регистрирайте се, за да добавите коментар


Калдейта ЕООД - © 2003-2010. Всички права запазени.
Препоръчваме: Национален Бизнес | Bomba.bg | IT Новини | Диплома.бг | TRAVEL туризъм | Реферати | AmAm.bg | Иде.ли | Курсови работи | Фото Форум | Spodeli.net | Фото-Култ | Atol.bg | Elmaz.com | MobileBulgaria.com | Казанлък.Com