先看这段C#代码
posted on 2007-10-29 16:34 鞠强 阅读(1650) 评论(8) 编辑 收藏 所属分类: .NET CLR研究
前面的问题:没有this才是正解吧。virtual this,连this都没有,怎么去找虚表?一错。OK,你可以说,虚表不就是一个类一张嘛,照样找得到,可静态绑定虚表其实是违背了多态精神的,与其如此还不如直接调用好,而virtual就是为了运行时绑定,so 这是二错。因此,virtual this的语义横竖是解释不同的。后面的问题:为了追求灵活性吧,比方说有模板的情况下,用##宏替换写类名比较ugly,不太符合强类型的风格,所以还是通过对象名引用比较称手。C#里面去掉了很多C++语法、语义的歧义,所以更robust,不太容易被钻孔子玩文字游戏。 回复 引用 查看
1楼的老大,有空你写一个这个主题的帖子吧! 强烈要求,:D 回复 引用 查看
这个...随便说说,上不了台面的理解了,一般教材里面都有的:) 回复 引用 查看
依稀记得从某篇文章中得知, 这是个语法问题: C#中只能用type.StaticMethod()方式访问某类型的静态成员, instance.StaticMethod()的调用方式是无效的. java中则没有这个限制. 回复 引用 查看
若一个方法声明中含有 static 修饰符,则称该方法为静态方法。若其中没有 static 修饰符时,则称该方法为实例方法。
static
静态方法不对特定实例进行操作,在静态方法中引用 this 是编译时错误。
this
实例方法对类的某个给定的实例进行操作,而且可以用 this(第 7.5.7 节)来访问该实例。
在 E.M 形式的成员访问(第 7.5.4 节)中引用一个方法时,如果 M 是静态方法,则 E 必须表示含有 M 的一个类型,而如果 M 是实例方法,则 E 必须表示含有 M 的类型的一个实例。
E.M
M
E
(第 10.2.5 节)对静态成员和实例成员之间的差异进行了进一步讨论。 ref: http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/csspec/html/vclrfcsharpspec_10_5_2.asp
其实VB.NET支持那样调用的说。。所以只是设计偏好问题。 回复 引用 查看
VB.Net里面会出现警告来着。 回复 引用 查看
看来是老大们自己的偏好,没啥太多的理由。 回复 引用 查看
Powered by: 博客园 Copyright © 鞠强