一句话说明白C#中的new与override的区别:
父类引用指向子类对象时调用方法,如果用是override重写,执行的是子类的方法;如果用的是new覆盖,执行的是父类的方法。
如果看了上面那句话,你还不是很懂,请看下面炒鸡清晰的代码,就肯定能明白啦!
public class BaseClass {
public virtual void PrintSomething(){
Console.WriteLine("执行了 父类 方法!");
}
}
public class DerivedClass : BaseClass {
public override void PrintSomething(){
Console.WriteLine("执行了 子类 方法!");
}
}
//客户端
public static void Main(string[] args){
BaseClass instance = new DerivedClass(); //父类引用指向子类对象
instance.PrintSomeThing();
}
//输出:
执行了 子类 方法!
如果换成new的话,请看下面:
public class BaseClass {
public virtual void PrintSomething(){
Console.WriteLine("执行了 父类 方法!");
}
}
public class DerivedClass : BaseClass {
public new void PrintSomething(){
Console.WriteLine("执行了 子类 方法!");
}
}
//客户端
public static void Main(string[] args){
BaseClass instance = new DerivedClass(); //父类引用指向子类对象
instance.PrintSomeThing();
}
//输出:
执行了 父类 方法!
现在明白了吧!
如果是父类引用指向父类对象,当然是执行父类方法;同样滴,子类引用指向子类对象,当然执行子类方法;
如果是父类引用指向子类对象呢?就是上面讲的:子类用override重写,该引用会向上传递到,执行子类方法;而如果是用new覆盖的话,相当于是对父类隐藏了此方法,故而执行父类方法;
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。