解决方案 »

  1.   

    MyBaseClass Base = new MyDerivedClass();//这一段是什么意思?声明一个类转换成子类吗?
    这是多态的概念,你看懂了面向对象的多态,你的问题就明白了
      

  2.   

    Base.DoSomething();//如果是的,那为什么调用这个方法会是调用MyBaseClass的方法?
    因为子类是new DoSomething不是 override DoSomething
      

  3.   

    A继承于B,就相当于A is a B
    那么这句就解释的通了
    MyBaseClass Base = new MyDerivedClass();
    //MyDerivedClass is a MyBaseClass,所以可以用MyBaseClass声明MyDerivedClass
    举个例子,一个抽象类Cars
    子类BMW、Benz、Ferrari都继承了父类Cars
    那么此时都可以用Cars声明子类
    如:
    Cars bmw=new BMW();
    Cars benz=new Benz();
    Cars Ferrari=new Ferrari();
    看下面向对象的多态...
      

  4.   

    new关键字不是重写,是隐藏,重写是override。隐藏什么意思?一个子类继承了父类,那么会继承父类的方法和字段,此时若子类一个方法名、参数列表和父类的一个方法相同,编译时会警告,但不会报错,可用new 关键字隐藏父类的同名方法。
    Base.DoSomething();
    这句就涉及到重写和隐藏的区别了。如果DerivedClass里的DoSomething方法是override父类的DoSomething,那么就是调用DerivedClass内的DoSomething,如果是new父类的DoSomething,那么就是调用BaseClass内的DoSomething
      

  5.   

    MyBaseClass Base = new MyDerivedClass();//这一段是什么意思?声明一个类转换成子类吗?
            MyDerivedClass Derived = new MyDerivedClass();
             Base.DoSomething();//如果是的,那为什么调用这个方法会是调用MyBaseClass的方法?
            Derived.DoSomething();第一句,是将子类对象转成父类,因为子类转父类是安全的,所以不用显式转换;
    第三句,是父类方法,base关键字表示是父类;
    第四句,子类用了关键字new,所以,这里的方法不是父类的方法。
      

  6.   

    对于虚方法,如子类不重写(override)那么久调用父类;如果重写就调用子类。但是你的事new。
      

  7.   

            MyBaseClass Base = new MyDerivedClass();                   //子类实例化,但只能调用子类继承的父类定义的方法(可重写)
        MyDerivedClass Derived = new MyDerivedClass();           //子类实例化,完全子类功能可用
            Base.DoSomething();                                                        //因为未重写,所以调用的是父类的实现
        Derived.DoSomething();                                                     //调用子类自身的实现(因为new父类被覆盖)
      

  8.   

    override重写虚方法,实现加法运算实例
    /// 建立的虚方法,可以在子类中被重写
            /// </summary>
            class Operation
            {
                public virtual double operation(int x,int y)
                {
                    return x * y;
                }
            }
            /// <summary>
            /// 在子类中重写虚方法
            /// </summary>
            class Addition : Operation
            {
                public override double operation(int x, int y)
                {
                    return (x + y); 
                }
            }        private void Form1_Load(object sender, EventArgs e)
            {
                comboBox1.SelectedIndex = 0;
            }        private void txtNum1_KeyPress(object sender, KeyPressEventArgs e)
            {
                if (!(e.KeyChar <= '9' && e.KeyChar >= '0') && e.KeyChar != '\r' && e.KeyChar != '\b')
                {
                    e.Handled = true;
                }
            }
            private void txtNum2_KeyPress(object sender, KeyPressEventArgs e)
            {
                if (!(e.KeyChar <= '9' && e.KeyChar >= '0') && e.KeyChar != '\r' && e.KeyChar != '\b')
                {
                    e.Handled = true;
                }
            }
            private void button1_Click(object sender, EventArgs e)
            {
                if (txtNum1.Text == "" || txtNum2.Text == "")
                {
                    MessageBox.Show("请输入数字", "警告", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                else
                {
                    if (comboBox1.SelectedIndex == 0)
                    {
                Operation multiplication = new Operation();//原始虚方法进行乘法运算
                        txtResult.Text = multiplication.operation(Convert.ToInt32(txtNum1.Text.Trim()), Convert.ToInt32(txtNum2.Text.Trim())).ToString();
                    }
                    else
                    {
                        Operation Addition = new Addition();
                        txtResult.Text = Addition.operation(Convert.ToInt32(txtNum1.Text.Trim()), Convert.ToInt32(txtNum2.Text.Trim())).ToString();
                    }
                }//CodeGo.net中的
            }
      

  9.   

    Base.DoSomething();//如果是的,那为什么调用这个方法会是调用MyBaseClass的方法?
    因为子类的DoSomething()是new的一个方法和父类的没继承关系。去掉new, 改为override 上面就是执行子类的方法了