1

一句话说明白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覆盖的话,相当于是对父类隐藏了此方法,故而执行父类方法;


毒鱼
18 声望3 粉丝

Unity game developer