多态,我们都在用啊!可是,你会不会觉得它烦?让我回答,考试的话,它就烦了!
namespace Try class SubClass : Base class Program |
上面的输出是什么?我运行了1000遍了,屏幕上写着:2 3。
其实看一看不是个什么问题啊。可是在VS.net 2005中有一个很奇怪的提示:
既然SubClass里的x hides了Base里的x,那么为什么打印出来的却都是Base里的x呢?
main函数中的a变量是Base行的,它引用的是Base类型,只不过是用SubClass的构造函数构造的而已,所以,
打印出来的是Base中的x也就不足为奇了。大家可以自己试试:
namespace ChexEx01 public Base() class SubClass : Base public SubClass() class Program |
这次打印出来的就是6 6了,很明显SubClass构造函数构造了变量a。最后,你再把SubClass中被注释掉的那行
代码的注释去掉,再看看运行结果。
如果有兴趣的话,可以去看看Java中同样的代码的运行:
http://tb.blog.csdn.net/TrackBack.aspx?PostId=1334517
这里发现C#比Java更明确的一个地方,就是virtual和override的使用,让人多少会注意到这个地方的细节,而Java完全是靠动态绑定机制来做的,让人糊涂啊。