已有56人关注
C#从入门到精通 类的多态
发表在C#图书答疑 2015-07-10
是否精华
版块置顶:
class MyClass1    //自定义类
    {
        private int x = 0;   //定义int类型变量,作为加数
        private int y = 0;  //定义int类型变量,作为被加数

        public int X      //加数
        {
            get
            {
                return x;
            }
            set
            {
                x = value;
            }
        }

        public int Y  //被加数
        {
            get
            {
                return y;
            }
            set
            {
                y=value;
            }
        }

        public virtual int Add() //定义一个virtual类型的方法,以便在子类(派生类)中重写该方法,求和
        {
            return x + y;
        }
    }

    class MyClass2 : MyClass1   //自定义类,该类继承自MyClass1
    {
       public override int Add() //重写基类中的虚方法
      {
          int x = 5;
          int y = 7;
          return x + y; 
      }        
    }
    class Program
    {
        static void Main(string[] args)
        {
            MyClass2 myclass2 = new MyClass2();      //实例化MyClass2的对象
            MyClass1 myclass1 = (MyClass1)myclass2; //使用子类MyClass2实例化基类MyClass1的对象
            myclass1.X = 3;                        //为MyClass1类中的属性赋值
            myclass1.Y = 5;                       //为MyClass1类中的属性赋值
            Console.WriteLine(myclass2.Add());   //调用子类中的方法
            Console.WriteLine(myclass1.Add());  //同样调用子类(派生类)中的方法
        }
    }

class MyClass1    //自定义类
    {
        private int x = 0;   //定义int类型变量,作为加数
        private int y = 0;  //定义int类型变量,作为被加数

        public int X      //加数
        {
            get
            {
                return x;
            }
            set
            {
                x = value;
            }
        }

        public int Y  //被加数
        {
            get
            {
                return y;
            }
            set
            {
                y=value;
            }
        }

        public virtual int Add() //定义一个virtual类型的方法,以便在子类(派生类)中重写该方法,求和
        {
            return x + y;
        }
    }

    class MyClass2 : MyClass1   //自定义类,该类继承自MyClass1
    {
       public override int Add() //重写基类中的虚方法
      {
          int x = 5;
          int y = 7;
          return x + y; 
      }        
    }
    class Program
    {
        static void Main(string[] args)
        {
            MyClass2 myclass2 = new MyClass2();      //实例化MyClass2的对象
            MyClass1 myclass1 = (MyClass1)myclass2; //使用子类MyClass2实例化基类MyClass1的对象
            myclass1.X = 3;                        //为MyClass1类中的属性赋值
            myclass1.Y = 5;                       //为MyClass1类中的属性赋值
            Console.WriteLine(myclass2.Add());   //调用子类中的方法
            Console.WriteLine(myclass1.Add());  //同样调用子类(派生类)中的方法
        }
    }

为什么两者运行结果不一样
分享到:
精彩评论 1
小科_mrkj
学分:43 LV2
2015-07-10
沙发
读者朋友:
    您好,两者运行结果是一样的,都调用的子类中重写的Add方法。
首页上一页 1 下一页尾页 1 条记录 1/1页
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照