多态,你烦不烦?--C#
来源:互联网 发布:歼15 数据 编辑:程序博客网 时间:2024/05/28 11:29
多态,我们都在用啊!可是,你会不会觉得它烦?让我回答,考试的话,它就烦了!
namespace Try
{
class Base
{
internal int x = 2;
internal virtual int get()
{
return x;
}
}
class SubClass : Base
{
internal int x = 3;
internal override int get()
{
return x;
}
}
class Program
{
static void Main(string[] args)
{
Base a = new SubClass();
Console.WriteLine(a.x);
Console.WriteLine(a.get());
}
}
}
上面的输出是什么?我运行了1000遍了,屏幕上写着:2 3。
其实看一看不是个什么问题啊。可是在VS.net 2005中有一个很奇怪的提示:
既然SubClass里的x hides了Base里的x,那么为什么打印出来的却都是Base里的x呢?
main函数中的a变量是Base行的,它引用的是Base类型,只不过是用SubClass的构造函数构造的而已,所以,
打印出来的是Base中的x也就不足为奇了。大家可以自己试试:
namespace ChexEx01
{
class Base
{
internal int x = 2;
public Base()
{
x = 5;
}
internal virtual int get()
{
return x;
}
}
class SubClass : Base
{
//internal int x = 3;
public SubClass()
{
x = 6;
}
internal override int get()
{
return x;
}
}
class Program
{
static void Main(string[] args)
{
Base a = new SubClass();
Console.WriteLine(a.x);
Console.WriteLine(a.get());
}
}
}
这次打印出来的就是6 6了,很明显SubClass构造函数构造了变量a。最后,你再把SubClass中被注释掉的那行
代码的注释去掉,再看看运行结果。
如果有兴趣的话,可以去看看Java中同样的代码的运行:
http://tb.blog.csdn.net/TrackBack.aspx?PostId=1334517
这里发现C#比Java更明确的一个地方,就是virtual和override的使用,让人多少会注意到这个地方的细节,而Java完全是靠动态绑定机制来做的,让人糊涂啊。
- 多态,你烦不烦?--C#
- 多态,你烦不烦?--Java
- C#想说爱你不容易
- C#中的你,呵呵
- 终于爱上你了,C#
- 你能调通这段C#代码不?
- 告诉你如何学C#
- 用C#改变你的桌面墙纸
- 如何调试你的C#程序
- C#四步讓你的程式幫助個性化
- 如何调试你的C#程序
- 如何调试你的C#程序
- C#你真的入门了吗?
- C#基本问题,你会么
- 如何调试你的C#程序
- 你的第一个C# WebService
- 你可能不知道的C#特性
- 手把手教你C#读取XML文件
- 微软新一代的操作系统Vista介绍
- 数据结构复习篇:内排序
- 浮点数存储格式
- 好消息:好C/C++/VC电子书下载
- 初窥世界的我
- 多态,你烦不烦?--C#
- 十年学会编程
- 过去10天了。。。该怎么样呢?
- 为Dev-C++安装设置OpenCV
- 多态,你烦不烦?--Java
- 我的CSDN博客
- 中国互联网公司和他们的口号
- 2006年9月14日星期l六
- 最佳实践 ADO.NET实用经验无保留曝光