一句话说明白C#中的new与override的区别:ide
父类引用指向子类对象时调用方法,若是用是override重写,执行的是子类的方法;若是用的是new覆盖,执行的是父类的方法。code
若是看了上面那句话,你还不是很懂,请看下面炒鸡清晰的代码,就确定能明白啦!对象
public class BaseClass {string
public virtual void PrintSomething(){ Console.WriteLine("执行了 父类 方法!"); }
}
public class DerivedClass : BaseClass {it
public override void PrintSomething(){ Console.WriteLine("执行了 子类 方法!"); }
}
//客户端
public static void Main(string[] args){class
BaseClass instance = new DerivedClass(); //父类引用指向子类对象 instance.PrintSomeThing();
}
//输出:
执行了 子类 方法!引用
若是换成new的话,请看下面:方法
public class BaseClass {客户端
public virtual void PrintSomething(){ Console.WriteLine("执行了 父类 方法!"); }
}
public class DerivedClass : BaseClass {static
public new void PrintSomething(){ Console.WriteLine("执行了 子类 方法!"); }
}
//客户端
public static void Main(string[] args){
BaseClass instance = new DerivedClass(); //父类引用指向子类对象 instance.PrintSomeThing();
}
//输出:
执行了 父类 方法!
如今明白了吧!
若是是父类引用指向父类对象,固然是执行父类方法;一样滴,子类引用指向子类对象,固然执行子类方法;
若是是父类引用指向子类对象呢?就是上面讲的:子类用override重写,该引用会向上传递到,执行子类方法;而若是是用new覆盖的话,至关因而对父类隐藏了此方法,故而执行父类方法;