多态,你烦不烦?--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也就不足为奇了。大家可以自己试试:

代码1

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完全是靠动态绑定机制来做的,让人糊涂啊。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 苹果手机酷狗音乐没有声音怎么办 在手机屏上不能缷载软件怎么办? 手机酷狗音乐下载歌曲要钱怎么办 酷狗下载歌曲后歌词不见了怎么办 手机酷我音乐缓冲文件损坏怎么办 苹果手机音乐里的歌删掉了怎么办 上课学生把粉笔擦藏起来了怎么办 手机没法解压10g压缩包怎么办 苹果id被锁邮箱也忘记密码怎么办 手机号注册的微信忘记密码怎么办 qq号注册微信忘记密码怎么办 云课堂密码忘记手机号更改了怎么办 孩子做事才要奖励怎么办的教案 员工做事效率低家庭情况不好怎么办 安全云课堂人脸识别失败怎么办 酷我k歌里音乐太少怎么办 酷狗里面的歌没有了怎么办 第一试用网登录密码忘记了怎么办 第一试用网登录密码忘了怎么办 微博登录直播间帐号被锁定怎么办 硫酸不小心弄到皮肤上怎么办 小米平板进水了开不了机怎么办 U盘被弹出后再插没有显示怎么办 视频从U盘传下来不能播放怎么办 微博账号忘了登录名怎么办 迅雷应版权方要求无法下载怎么办? 微信账号忘记密码上面有钱怎么办 蘑菇街账号忘记了里面有钱怎么办 手机注册的百度云帐号换号怎么办 网易云音乐sd卡写入失败怎么办? 玩客云涌u盘满了怎么办 手机安装杜比音效失败死机该怎么办 网易云音乐下载额度用完了怎么办 苹果手机付费app连续扣费怎么办 oppoO粉卡的流量用没了怎么办 qq邮箱里的文件过期了怎么办 163邮箱里的文件过期了怎么办 做人事的给员工漏交社保了怎么办 公司漏交了员工一个月的社保怎么办 小米4c能充电不能开机怎么办 小米手机关机开不开机该怎么办