首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

关于暗藏和用重写的区别

2013-12-26 
关于隐藏和用重写的区别//隐藏 public class a{public float speedpublic float Run(float distance){ret

关于隐藏和用重写的区别
//隐藏 
public class a
    {
        public float speed;
        public float Run(float distance)
        {
            return distance / speed;
        }
    }

    public class b : a
    {
        public  b()
        {
            speed = 40;
        }
        public new  float Run(float distance)
        {
            return 1.6f * base.Run(distance);
        }
    }


    class Program
    {

        static void Main()
        {
            b t1 = new b();
            Console.WriteLine("卡车行驶1000公里需{0}小时",t1.Run(1000));
            a a1 = t1;
            Console.WriteLine("汽车行驶1000公里需 {0}小时", a1.Run(1000));
            Console.Read();
        }



    }
输出结果为:卡车行驶1000公里需40小时
汽车行驶1000公里需25小时

//重写:
 public class a
    {
        public float speed;
        public  virtual  float   Run(float distance)
        {
            return distance / speed;
        }
    }

    public class b : a
    {
        public  b()
        {
            speed = 40;
        }
        public override  float Run(float distance)
        {
            return 1.6f * base.Run(distance);
        }
    }


    class Program
    {

        static void Main()
        {
            b t1 = new b();
            Console.WriteLine("卡车行驶1000公里需{0}小时",t1.Run(1000));
            a a1 = t1;
            Console.WriteLine("汽车行驶1000公里需 {0}小时", a1.Run(1000));
            Console.Read();
        }



    }
输出结果为:卡车行驶1000公里需40小时
汽车行驶1000公里需40小时

怎么结果不一样?还有那个a a1=t1;怎么解释这个语句;  想半天也没能明白;

[解决办法]
a1 = t1,就是a1指向了t1,他俩是同一个东西
[解决办法]
意思就是实际上是个b,但下面要调用的是a.Run()

因为b有override这个Run()方法,所以最后执行的是b.Run()






[解决办法]

引用:
怎么结果不一样?还有那个a a1=t1;怎么解释这个语句;  想半天也没能明白;


a a1=t1就是面向对象里面的多态。
其实别人说的再多最后还得靠你自己去理解,即使在这里我跟你说了,你也不明白。


热点排行