详细介绍VB.NET MyClass

学习VB.NET时,你可能会遇到VB.NET MyClass问题,这里将介绍VB.NET MyClass问题的解决方法,在这里拿出来和大家分享一下。VB.NET支持一项很有意思的功能——MyClass。大部分人使用VB.NET MyClass可能仅限于调用本类其他构造函数时。其实MyClass可以产生一些很独特的用法。MyClass永远按类的成员为不可重写的状态进行调用,即当类的方法被重写后,用MyClass仍能得到自身的版本。下面这个例子和VB帮助中所举的例子非常相似

10年的上高网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。成都全网营销的优势是能够根据用户设备显示端的尺寸不同,自动调整上高建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。创新互联从事“上高网站设计”,“上高网站推广”以来,每个客户项目都认真落实执行。

 
 
 
  1. Public Class MyClassBase  
  2. Protected Overridable Sub Greeting()  
  3. Console.WriteLine("Hello form Base")  
  4. End Sub  
  5.  
  6. Public Sub UseMe()  
  7. Me.Greeting()  
  8. End Sub  
  9.  
  10. Public Sub UseMyClass()  
  11. MyClass.Greeting()  
  12. End Sub  
  13. End Class  
  14.  
  15. Public Class MyClassSub  
  16. Inherits MyClassBase  
  17.  
  18. Protected Overrides Sub Greeting()  
  19. Console.WriteLine("Hello form Sub")  
  20. End Sub  
  21. End Class 

我们用一段代码来测试:

 
 
 
  1. Dim o As MyClassBase = New MyClassSub()  
  2. o.UseMe()  
  3. o.UseMyClass() 

结果是UseMe执行了子类的版本,而UseMyClass还是执行了基类本身的版本,尽管这是一个虚拟方法。观其IL,可以看到其简单的实现原理:

Me用的调用指令是callvirt

 
 
 
  1. IL_0001: callvirt   instance void App1.MyClassBase::Greeting() 

而VB.NET MyClass调用的是call

 
 
 
  1. IL_0001:  call       instance void App1.MyClassBase::Greeting() 

奇怪的是,如此简单的一个功能,我竟然无法用C#实现,C#怎样也不允许我按非虚函数的方式调用一个虚函数。C++可以用类名::方法名的方式访问自身版本的函数,但C#的类名只能用来访问静态的成员。这真是C#一个奇怪的限制。

【编辑推荐】

  1. 原理分析VB.NET开发控件
  2. 自己动手修改VB.NET支付宝接口
  3. 如何快速掌握VB.NET控件数组
  4. 描述VB.NET IDisplayer接口
  5. 事例概括VB.NET Display方法

文章标题:详细介绍VB.NET MyClass
标题来源:http://www.shufengxianlan.com/qtweb/news26/100426.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联