代码如下:
问题: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、类继承后,方法的重写,是不是父类必须写了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 = "我是猫"; }
}
必须是这样。
2、Cat这个类中,用new和override关键字有什么区别?
new相当于公共汽车上的逃生锤,明白么?几乎用不到。它的作用是故意定义一个和基类名字完全相同但是毫不搭界的方法,你觉得这样的用途你用得到么?
3、如果是编译成dll文件类,应该怎样引用后继承? 如果编译成dll文件中的没有Virtual关键字,我是不是就不能重写方法?
是的,好比一个变量没有加上public你当然不能访问到了。
是的,之前就看到你的留言,但是忘了和你说了。在IL层面,abstract方法同时会加上virtual。也就是定义一个abstract方法,其实是定义一个abstract virtual的方法。因为abstract方法不加上virtual没有意义,所以C#编译器允许你直接写abstract。因此说只有virtual方法才能被重写是没有问题的。
Cat c= new Cat()
这样写的时候,你就发现a.Introduce() 跟c.Introduce()不是一回事