一句话说明白C#中的new与override的区别

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

相关文章
相关标签/搜索