代码如下:   
问题:1、类继承后,方法的重写,是不是父类必须写了Virtual才行?
2、Cat这个类中,用new和override关键字有什么区别?
3、如果是编译成dll文件类,应该怎样引用后继承? 如果编译成dll文件中的没有Virtual关键字,我是不是就不能重写方法?    public class Animal
    {
        public string Word = "";
        public virtual void Introduce()
        {
            Word = "我是动物";
        }
    }    public class Dog : Animal
    {
        public override void Introduce()
        {
            Word = "我是狗";             
           
        }
    }
    public class Cat : Animal
    {
        public new void Introduce()
        {
            Word = "我是猫";        }
    }

解决方案 »

  1.   

    1、类继承后,方法的重写,是不是父类必须写了Virtual才行?
    必须是这样。
    2、Cat这个类中,用new和override关键字有什么区别?
    new相当于公共汽车上的逃生锤,明白么?几乎用不到。它的作用是故意定义一个和基类名字完全相同但是毫不搭界的方法,你觉得这样的用途你用得到么?
    3、如果是编译成dll文件类,应该怎样引用后继承? 如果编译成dll文件中的没有Virtual关键字,我是不是就不能重写方法?
    是的,好比一个变量没有加上public你当然不能访问到了。
      

  2.   

    版主又忘了,Abstract也是可以重写的
      

  3.   


    是的,之前就看到你的留言,但是忘了和你说了。在IL层面,abstract方法同时会加上virtual。也就是定义一个abstract方法,其实是定义一个abstract virtual的方法。因为abstract方法不加上virtual没有意义,所以C#编译器允许你直接写abstract。因此说只有virtual方法才能被重写是没有问题的。
      

  4.   

    Animal a= new Cat();
    Cat c= new Cat()
    这样写的时候,你就发现a.Introduce() 跟c.Introduce()不是一回事