經(jīng)驗(yàn)之談VB.NET Protected方法
VB.NET繼承還是比較常用的,于是我研究了一下VB.NET Protected方法,在這里拿出來(lái)和大家分享一下,希望對(duì)大家有用。當(dāng)我們通過(guò)繼承來(lái)創(chuàng)建一個(gè)子類(lèi)的時(shí)候,新類(lèi)就可以從父類(lèi)中得到了所有的Public(公共)和Friend(友)方法、屬性和變量。
#T#如果你在父類(lèi)中聲明一個(gè)Private(私有)的方法、屬性和變量,那么在新的子類(lèi)中就不能得到這個(gè)類(lèi)的方法、屬性和變量。當(dāng)然也有個(gè)例外,就是New方法。構(gòu)造函數(shù)方法必須在每一個(gè)子類(lèi)中重新編寫(xiě)。這個(gè)內(nèi)容我們?cè)诒窘坛痰暮竺鎸⑸钊胗懻摗Ee個(gè)例子,我們可能從LineItem類(lèi)中重寫(xiě)Amount方法,具體如下:
- Public Function Amount() As Single
- Return CalcAmount
- End Function
- Private Function CalcAmount() As Single
- Return fQuantity * fPrice
- End Function
從這個(gè)改變中,我們可以看到公共的方法Amount使用了Private方法來(lái)工作。當(dāng)我們利用LineItem來(lái)創(chuàng)建子類(lèi)ServiceLine的時(shí)候,任何的ServiceLine對(duì)象都有一個(gè)Amount方法,因?yàn)樗诨?lèi)中聲明為Public。另外一方面,這個(gè)CalcAmount方法被聲明為Private,所以所有的ServiceLine類(lèi)和任何的客戶(hù)代碼都不能訪問(wèn)它。這里值得一提的是,既然Amount方法存在于LineItem類(lèi)中,它就可以訪問(wèn)CalcAmount方法即使在ServiceLine類(lèi)中不能看到這個(gè)方法。
舉個(gè)例子,在我們的客戶(hù)代碼中我們可以這樣做:
- Protected Sub Button1_Click(ByVal sender As Object, _
- ByVal e As System.EventArgs)
- Dim sl As ServiceLine
- sl = New ServiceLine()
- sl.Item = delivery sl.Price = 20
- sl.DateProvided = Now
- MsgBox(sl.Amount, MsgBoxStyle.Information, amount)
- End Sub
結(jié)果顯示在一個(gè)消息框中,這樣就闡明了CalcAmount方法被成功調(diào)用了,雖然客戶(hù)代碼和ServiceLine代碼沒(méi)有直接調(diào)用它。
VB.NET Protected方法
有時(shí),Public和Private并不能滿(mǎn)足我們的要求。如果我們想聲明一些變量或者方法為Private,那么這些變量和方法就只能在我們的類(lèi)中使用;但是當(dāng)我們聲明一些變量和方法為Public或者Friend,那么這些變量和方法就可以在子類(lèi)和客戶(hù)代碼中使用。但是,有時(shí)有聲明一些變量和方法,讓它們?cè)谧宇?lèi)中有效,而在客戶(hù)代碼中不能用,該怎么辦呢?這里可以使用VB.NET Protected方法轄域。當(dāng)變量或者方法被聲明為Protected的時(shí)候,對(duì)于任何類(lèi)外部的代碼將不能調(diào)用,但是還是可以被由它繼承而來(lái)的子類(lèi)調(diào)用。舉個(gè)VB.NET Protected方法例子吧,如下:
- Public Class ParentClass
- Protected TheValue As Integer
- End Class
- Public Class SubClass
- Inherits ParentClass
- Public Function GetValue() As Integer
- Return TheValue
- End Function
- End Class
在上面的代碼中我們有一個(gè)父類(lèi),它有一個(gè)Protected成員變量TheValue。這個(gè)變量在任何的客戶(hù)代碼中都不能被調(diào)用。但是這個(gè)變量對(duì)于任何的子類(lèi)都是有效的因?yàn)樗^承了這個(gè)父類(lèi)。在這個(gè)例子中,SubClass有一個(gè)Public方法返回了Protected變量的數(shù)值,但是這個(gè)變量對(duì)于類(lèi)的外部任何客戶(hù)代碼都是無(wú)效的。