从Csharp走到VB.Net(一):MyClass保留字

2016-01-29 12:40 55 1 收藏

从Csharp走到VB.Net(一):MyClass保留字,从Csharp走到VB.Net(一):MyClass保留字

【 tulaoshi.com - ASP.NET 】


2003年开始我接触的第一个B/S项目是DotNet,用的是Csharp.到现在2年过去了,也接触了VB.Net的项目,一步步走过来,看到同时CLR平台,2种语言在保留字上的特性还是很大的.以下我一一列来:关于MyClass,大家请先建立一个VBConsoleApplication程序,将本文SourceCP进去
Module Module1
Class BaseClass Public Overridable Sub MyMethod() Console.WriteLine("Father is 50 years old!") End Sub Public Sub UseMe() Me.MyMethod() ' Use calling class's version, even if an override. End Sub Public Sub UseMyClass() MyClass.MyMethod() ' Use this version and not any override. End Sub End Class Class DerivedClass : Inherits BaseClass Public Overrides Sub MyMethod() Console.WriteLine("child is just 25 years old!") End Sub End Class
Sub Main() Dim child As New DerivedClass child.UseMe() child.UseMyClass() Console.ReadLine()
End Sub
End Module但是在Csharp里竟然无法实现,C#怎样也不允许我按非虚函数的方式调用一个虚函数。C++可以用类名::方法名的方式访问自身版本的函数,但C#的类名只能用来访问静态的成员。这真是C#一个奇怪的限制。也许是我少见多怪吧.在MSDN中是这么描述的:MyClass 的行为类似于引用最初实现时类的当前实例的对象变量。MyClass 与 Me 类似,但对它的所有方法的调用都按该方法为 NotOverridable 来处理。因此,所调用的方法不受派生类中的重写影响。尽管 DerivedClass 重写了 MyMethod,但 UseMyClass 中的 MyClass 关键字使重写的影响无效,编译器会将该调用解析为 MyMethod 的基类版本。MyClass 不能在 Shared 方法内部使用,但您可以在实例方法内部使用它来访问类的共享成员。但是在Csharp里竟然无法实现,C#怎样也不允许我按非虚函数的方式调用一个虚函数。C++可以用类名::方法名的方式访问自身版本的函数,但C#的类名只能用来访问静态的成员。这真是C#一个奇怪的限制。也许是我少见多怪吧.在MSDN中是这么描述的:MyClass 的行为类似于引用最初实现时类的当前实例的对象变量。MyClass 与 Me 类似,但对它的所有方法的调用都按该方法为 NotOverridable 来处理。因此,所调用的方法不受派生类中的重写影响。尽管 DerivedClass 重写了 MyMethod,但 UseMyClass 中的 MyClass 关键字使重写的影响无效,编译器会将该调用解析为 MyMethod 的基类版本。MyClass 不能在 Shared 方法内部使用,但您可以在实例方法内部使用它来访问类的共享成员。

这点在商业应用中还是很不错的,比如父类为一个EmployeeBase,包含一个底薪的数据,那么在实例化雇员的Employee中,Dim e1 as new Employee(EmployeeID),增加员工的底薪的时候,在O/R映像模型建立好之后只需要调用e1.AddSalary(Salary)方法即可调用基类的底薪修改方法.(即统一加底薪).个人意见,呵呵,所得不好,还请大家多多指教.

来源:http://www.tulaoshi.com/n/20160129/1487098.html

延伸阅读
标签: vb
三、完善的面向对象支持 VB.NET提供了完善的面向对象编程支持,是一种真正的OO语言。 完善的面向对象支持应该包括封装(Encapsulation),继承(Inheritance)和多态性(Polymorphism)。当前的VB6已经部分地实现了这些支持,但仍因某些地方未能符合标准而受到责难。 封装是指对象只显露公用的方法和属性。VB6已经提供了健壮的...
Private Sub Form1_Closing(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing If MsgBox("請注意看關閉的視窗", MsgBoxStyle.Question + MsgBoxStyle.OKCancel, "關閉") = MsgBoxResult.OK Then Dim d As Double For d = 1 To 0 + 0.2 Step -0.2 System.Threading.Thread.Sleep(50) Applic...
标签: vb
(1).视窗2000服务器版 (2). .Net FrameWork SDK Beta 2 二.初步认识注册表: 首先我们来了解一下注册表的组成。在注册表中,子树是主要节点,包括健、子健和值。健就是打开"注册表编辑器"后,出现在"注册表编辑器"左窗格中的文件夹,健可以包含子健和值健。子健就是健中的健,在注册表中,子健属于树和健。值健...
今天看到能够进行 C# to VB.Net 代码转换的网址: 发现并不能很完美的转换成VB.Net,毕竟C#的有些特定代码VB.Net是没有的. 不过可以用来学习,也不错! #1: http://www.aspalliance.com/aldotnet/examples/translate.aspx #2: http://www.kamalpatel.net/ConvertCSharp2VB.aspx
标签: vb
概述:这篇文章为计划将他们的应用程序更新到Visual Basic.NET的微软Visual Basic 开发用户提供一些关于XML的建议。主要包括Visual Basic 6和Visual Basic.NET对XML操作的不同之处,以及Visual Basic.NET关于这方面新增工具的应用。 概述:这篇文章为计划将他们的应用程序更新到Visual Basic.NET的微软Visual Basic 开发用户提供一些关于...

经验教程

163

收藏

8
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部