欢迎各位兄弟 发布技术文章
这里的技术是共享的
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleHelp { public class RunVirtual { /// <summary> /// 虚方法说明以及代码 /// </summary> public void TestRunVirtual() { //注意:虚方法不允许static, abstract, 或override 修饰符 TestA A;// 定义一个a这个A类的对象.这个A就是a的申明类 TestA B;// 定义一个b这个A类的对象.这个A就是b的申明类 TestA C;// 定义一个c这个A类的对象.这个A就是b的申明类 TestA D;// 定义一个d这个A类的对象.这个A就是b的申明类 A = new TestA();// 实例化a对象,A是a的实例类 B = new TestB();// 实例化b对象,B是b的实例类 C = new TestC();// 实例化b对象,C是b的实例类 D = new TestD();// 实例化b对象,D是b的实例类 A.Fuctio();//先检查声明类A,发现是虚函数,跳出检查实例类即为本身,执行A的Fuctio方法 B.Fuctio();//先检查声明类A,发现是虚函数,跳出检查实例类,实例类B中有重写,执行重写方法Fuctio C.Fuctio();//先检查声明类A,发现是虚函数,跳出检查实例类,实例类C中没有重写,找父类B(继承了B类),执行B类中重写方法Fuctio D.Fuctio();//先检查声明类A,发现是虚函数,跳出检查实例类,实例类D中虽然有声明了Fuctio方法,但并没有重写Fuction,找父类A,发现为本身,执行A类的Fuctio } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleHelp { public class TestA { public virtual void Fuctio() { Console.Write("Fuction in A"); } } public class TestB:TestA { public override void Fuctio() { Console.Write("Fuction in B"); } } public class TestC : TestB { } public class TestD : TestA { public void Fuctio() { Console.Write("Fuction in D"); } } }