浅谈VB.NET Implements语句

开发 后端
这里介绍VB.NET Implements语句可以让你想怎么实现接口就怎么实现,比如下面的类Implementation用两个名字根本不一样的方法实现了两个接口。

VB.NET有很多值得学习的地方,这里我们主要介绍VB.NET Implements语句,包括介绍Test函数等方面。VB.NET采用的实现接口的语法是VB5发明的Implements,这个实现接口的语法在当今主流语言中***。比如我有两个接口:

  1. Interface Interface1  
  2. Sub Test()  
  3. End Interface 
  1. Interface Interface2  
  2. Sub Test()  
  3. End Interface 

这两个接口有一个完全一样的成员Test。假设我需要用一个类同时实现两个接口会怎么样呢?先想想看,如果是Java,JScrip.NET这样的语言就只能用一个Test函数实现两个接口的Test成员。假如两个Test只是偶然重名,其内容必须要分别实现怎么办,于是一些解决接口重名的设计出现了……。VB.NET Implements语句可以让你想怎么实现接口就怎么实现,比如下面的类Implementation用两个名字根本不一样的方法实现了两个接口。

  1. Public Class Implementation  
  2. Implements Interface1, Interface2  
  3.  
  4. Public Sub Hello() Implements Interface1.Test  
  5.  
  6. End Sub  
  7.  
  8. Private Sub Hi() Implements Interface2.Test  
  9.  
  10. End Sub  
  11. End Class 

也就是说,VB允许用任意名字的函数实现接口中的成员,而且访问器可以是任意的,比如想用Public还是Private都可以。C#在处理重名成员上提供了显式实现(explicit implementation)的语法,其实现上述两个接口的语法为

  1. public class Class1 : Interface1, Interface2  
  2. {  
  3. public Class1{}  
  4. void Interface1.Test{}  
  5. void Interface2.Test{}  

注意这里,C#只能用接口名.成员名的名字来命名实现方法,而且访问器只能是private,不能公开显式实现的方法。

在考察了IL以后,我发现.NET支持隐式实现和显式实现两种方式。其中隐式实现只要在类里面放一个与接口成员方法名字一样的方法即可——这一种VB不支持。而显式实现则在方法的描述信息里加入:

.override TestApp.Interface1::Test

无论是C#的显式实现还是VB.NET Implements语句都是这样的原理。也就是说.NET提供了换名实现接口成员的功能,但是只有VB将这个自由让给了用户,而其他语言还是采用了经典的语法。

【编辑推荐】

  1. 详细分析VB.NET WithEvents
  2. 浅析VB.NET局部静态变量
  3. 原理分析VB.NET开发控件
  4. 自己动手用代码实现VB.NET ListView加载数据
  5. 详细介绍VB.NET MyClass
责任编辑:佚名 来源: CSDN
相关推荐

2009-10-14 12:51:41

VB.NET Data

2009-10-20 09:39:04

VB.NET Butt

2009-10-15 17:41:14

VB.NET Impo

2009-11-04 08:53:57

VB.NET AddH

2009-10-13 11:22:46

VB.NET调用Web

2009-10-21 16:00:26

VB.NET CASE

2009-10-12 13:32:58

VB.NET线程构造器

2009-10-16 10:14:26

VB.NET使用Fil

2009-10-28 14:13:32

VB.NET File

2009-10-16 11:21:54

VB.NET Decl

2009-10-15 11:42:05

VB.Net赋值语句

2010-01-22 15:56:03

VB.NET获取当前U

2009-10-19 11:28:42

VB.NET语言.NET开发语言

2010-01-21 18:35:56

VB.NET Impo

2009-10-28 14:44:43

VB.NET Name

2010-01-21 17:23:05

VB.NET Radi

2009-06-29 10:50:18

VB.NET面向对象能力

2010-01-21 15:10:37

VB.NET静态托盘程

2010-01-18 13:46:32

VB.NET条件分支语

2010-01-19 15:42:30

VB.NET赋值语句
点赞
收藏

51CTO技术栈公众号