这种重写是修改基类的执行代码吗?

解决方案 »

  1.   

    不会的,你用new关键字才是重写
      

  2.   

    用new 是在当前类中新建同名方法
    override是在当前类中重写父类方法
      

  3.   

    修改基类的执行代码
    那基类的代码到底有没有被修改
        protected void Button2_Click(object sender, EventArgs e)
        {
            MyDerivedClass aa = new MyDerivedClass();
            MyBaseClass bb = new MyBaseClass();
            Label1.Text = aa.DoSomething();
            Label2.Text = bb.DoSomething();
        }
        class MyBaseClass
        {
            public virtual string DoSomething()
            {
                return "ff";
            }
        }    class MyDerivedClass : MyBaseClass
        {
            public override string DoSomething()
            {
                return "gg";
            }
        }显示的还是gg ff
    那就是说基类还是原的的执行代码啊
    那到底重写了什么啊
      

  4.   

    当父类方法不是virtual时,只能用new新建同名方法,就是父类方法拒绝子类重写的时候,用new
    如果父类方法是virturl时,用那种方法都行,我理解地也不深刻,sorry
      

  5.   

    Label1.Text = "gg";
    Label2.Text = "ff";
      

  6.   

    override重写是重新实现基类的方法
    new 是新建的方法....他们有什么区别?。 重写可以实现多态..
    class A
    {
      public  virtual void method(); 
    }
    class B:A
    {
       public  override void method(); 
    }class main
    {
       public static void main()
       {
           A a=new B();
           a.method();// 实际是调用B.method
       }
    }
      

  7.   

    那就是说基类还是原的的执行代码啊
    那到底重写了什么啊
    ----------------
    重写指的是在子类的实现,父类的此方法在子类已经被修改,不知道你听明白没有!
    父类的方法不变,不会被子类的override改变
      

  8.   

    class MyBaseClass
        {
            public virtual string DoSomething()
            {
                return "ff";
            }        public string DoSomething2()
            {
                return "ff";
            }
        }    class MyDerivedClass : MyBaseClass
        {
            public override string DoSomething()
            {
                return "gg";
            }
            public new string DoSomething2()
            {
                return "gg";
            }
        }MyBaseClass aa = new MyDerivedClass();
    MyBaseClass bb = new MyBaseClass();分别看看aa和bb的DoSomething和DoSomething2就知道了。
      

  9.   

    namespace kkun
    {
    class kkun
    {
    class MyBaseClass
    {
    public virtual string DoSomething()
    {
    return "11";
    } public string DoSomething2()
    {
    return "12";
    }
    } class MyDerivedClass : MyBaseClass
    {
    public override string DoSomething()
    {
    return "21";
    }
    public new string DoSomething2()
    {
    return "22";
    }
    }
    static void Main() 
    {
    MyBaseClass aa = new MyDerivedClass();
    MyBaseClass bb = new MyBaseClass();
    MyDerivedClass cc=new MyDerivedClass();
    System.Console.WriteLine(aa.DoSomething());//21
    System.Console.WriteLine(aa.DoSomething2());//12
    System.Console.WriteLine(bb.DoSomething());//11
    System.Console.WriteLine(bb.DoSomething2());//12
    System.Console.WriteLine(cc.DoSomething());//21
    System.Console.WriteLine(cc.DoSomething2());//22
    System.Console.ReadLine();
    }
    }}