问题描述
代码:classProgram{staticvoidMain(string[]args){bb1=newb();aa1=b1;a1.f();a1.g();b1.f();b1.g();Console.ReadLine();}}classa{publicvoidf(){Console.WriteLine("a.f");}publicvirtualvoidg(){Console.WriteLine("a.g");}}classb:a{newpublicvoidf(){Console.WriteLine("b.f");}publicoverridevoidg(){Console.WriteLine("b.g");}}输出:a.fb.gb.fb.g问题:输出结果一为什么走的是a1.f()而不是b1.f();关键问题是不在aa1=b1;,请高手给解释一下;
解决方案
解决方案二:
区别在于f()是非虚的,而g()是虚的方法
解决方案三:
因为a中的f和b中的f完全无关,只是名字相同而已(因此b中用了new,其实new不用也能通过,但是会有警告,因为容易让人混淆)。但a中的g和b中的g就有关,b中的g重写了a中的g
时间: 2024-11-16 10:34:21