淺談VB.NET Implements語句
VB.NET有很多值得學習的地方,這里我們主要介紹VB.NET Implements語句,包括介紹Test函數(shù)等方面。VB.NET采用的實現(xiàn)接口的語法是VB5發(fā)明的Implements,這個實現(xiàn)接口的語法在當今主流語言中***。比如我有兩個接口:
- Interface Interface1
- Sub Test()
- End Interface
- Interface Interface2
- Sub Test()
- End Interface
這兩個接口有一個完全一樣的成員Test。假設我需要用一個類同時實現(xiàn)兩個接口會怎么樣呢?先想想看,如果是Java,JScrip.NET這樣的語言就只能用一個Test函數(shù)實現(xiàn)兩個接口的Test成員。假如兩個Test只是偶然重名,其內(nèi)容必須要分別實現(xiàn)怎么辦,于是一些解決接口重名的設計出現(xiàn)了……。VB.NET Implements語句可以讓你想怎么實現(xiàn)接口就怎么實現(xiàn),比如下面的類Implementation用兩個名字根本不一樣的方法實現(xiàn)了兩個接口。
- Public Class Implementation
- Implements Interface1, Interface2
- Public Sub Hello() Implements Interface1.Test
- End Sub
- Private Sub Hi() Implements Interface2.Test
- End Sub
- End Class
也就是說,VB允許用任意名字的函數(shù)實現(xiàn)接口中的成員,而且訪問器可以是任意的,比如想用Public還是Private都可以。C#在處理重名成員上提供了顯式實現(xiàn)(explicit implementation)的語法,其實現(xiàn)上述兩個接口的語法為
- public class Class1 : Interface1, Interface2
- {
- public Class1{}
- void Interface1.Test{}
- void Interface2.Test{}
- }
注意這里,C#只能用接口名.成員名的名字來命名實現(xiàn)方法,而且訪問器只能是private,不能公開顯式實現(xiàn)的方法。
在考察了IL以后,我發(fā)現(xiàn).NET支持隱式實現(xiàn)和顯式實現(xiàn)兩種方式。其中隱式實現(xiàn)只要在類里面放一個與接口成員方法名字一樣的方法即可——這一種VB不支持。而顯式實現(xiàn)則在方法的描述信息里加入:
.override TestApp.Interface1::Test
無論是C#的顯式實現(xiàn)還是VB.NET Implements語句都是這樣的原理。也就是說.NET提供了換名實現(xiàn)接口成員的功能,但是只有VB將這個自由讓給了用戶,而其他語言還是采用了經(jīng)典的語法。
【編輯推薦】