当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > 从Csharp走到VB.Net(一):MyClass保留字

ASP.NET
asp.net 禁用viewstate在web.config里
asp.net 虚方法、抽象方法、接口疑问
c# 操作符?? null coalescing operator
.net 反序题目的详细解答
implicitly convert type ''int'' to ''short''的原因与解决方法
比较完整的 asp.net 学习流程
官网 Ext direct包中.NET版的问题
C# XML操作 代码大全(读XML,写XML,更新,删除节点,与dataset结合等)
c# 连接字符串数据库服务器端口号 .net状态服务器端口号
ASP.NET 路径问题的解决方法
asp.net TemplateField模板中的Bind方法和Eval方法
asp.net Web.config 详细配置说明
asp.net 2个日期之间的整月数的算法
ASP.Net PlaceHolder、Panel等控件未实现INamingContainer,导致FindControl无效
Request.RawUrl 属性的应用收
.net 读取项目AssemblyInfo.cs属性值
asp.net URL 显示乱码 解决方法
asp.net 页面之间传递参数的几种方法
asp.net 一个封装比较完整的FTP类
C# FTP,GetResponse(),远程服务器返回错误

ASP.NET 中的 从Csharp走到VB.Net(一):MyClass保留字


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-03   浏览: 198 ::
收藏到网摘: n/a


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)方法即可调用基类的底薪修改方法.(即统一加底薪).个人意见,呵呵,所得不好,还请大家多多指教.