C#方法修饰符 new和override的区别
关键字 方法修饰符 | 功能 |
---|---|
new | 方法的覆盖 |
override | 方法的重写 |
在使用父类引用指向子类对象时可以看出区别,下面给出例子:
new
using System;
namespace Test {
class Program {
static void Main(string[] args) {
Enemy e = new Boss();
e.Move();
}
}
class Enemy {
public void Move() {
System.Console.WriteLine("move");
}
}
class Boss : Enemy {
public new void Move() {
System.Console.WriteLine("boss move");
}
}
}
输出
move
override
using System;
namespace Test {
class Program {
static void Main(string[] args) {
Enemy e = new Boss();
e.Move();
}
}
class Enemy {
public virtual void Move() { // override继承的父类的方法成员需要标记为 virtual、abstract 或 override,这里使用virtual
System.Console.WriteLine("move");
}
}
class Boss : Enemy {
public override void Move() {
System.Console.WriteLine("boss move");
}
}
}
输出
boss move
可以看到:
new
是覆盖了父类的方法,如果是父类的引用指向子类的对象,Move()
方法调用的是父类的方法;
override
是重写了方法,如果是父类的引用指向子类的对象,Move()
方法调用的是子类的方法。