本文主要是介绍C#中的 override和new,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
直接看代码就知道了。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace 虚函数
{class Base{virtual public void outClassName(){Console.WriteLine( "基类" );}virtual public void outPut(){Console.WriteLine("基类");}}class FirstDerived : Base{override public void outClassName(){Console.WriteLine("第一个派生类的outClassName方法");}override public void outPut(){Console.WriteLine("第一个派生类中的outPut方法");}}class SecondDerived : FirstDerived{public override void outClassName(){Console.WriteLine("第二个派生类的outClassName方法");}new public void outPut(){Console.WriteLine("第二个派生类中的outPut方法");}}class Program{static void Main(string[] args){SecondDerived sd = new SecondDerived();Base base1 = (Base)sd;base1.outPut();//第一个派生类中的outPut方法base1.outClassName();//第二个派生类的outClassName方法}}
}
图解C#中的原话:
当使用对象基类部分的引用调用一个覆写的方法,方法的调用被沿着派生类层次上朔执行,一直到被标记为override的方法的最高派生版本。 这句话的关键词是 沿着派生类层次上朔执行, 直到, 标记为override的方法
也就是说如果是不会上溯到new标记的方法的。
使用new的话,按照我的理解是 ——切断该方法与父类(父类的父类。。。)中同名同标签的方法的联系,因此
new public void outPut()
{
Console.WriteLine("第二个派生类中的outPut方法");
}
这个方法和父类中的void outPut( )方法没有任何关系了。动态绑定自然轮不到这个方法了。
这篇关于C#中的 override和new的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!