new override virtual 区别与用法
分析出运行结果?
View Code
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication2 { class Program { static void Main(string[] args) { B b = new B(); A a = new A(); A a2 = new B(); a.Fun2(a); a.Fun2(b); b.Fun2(a); Console.WriteLine("==========================="); a2.Fun2(a); a2.Fun2(a2); Console.ReadLine(); } } //先分析a.Fun2(b):传入的参数是B类型的,因此a.Fun1(1)执行的是B类型对象的Fun1方法,运行结果是2 //然后执行Fun1(5),由于运行的是A类型对象的Fun2方法,Fun1自然就是A中的Fun1,运行结果是5 //再分析b.Fun2(a):传入的参数是A类型的,因此a.Fun1(1)执行的是A类型对象的Fun1方法,运行结果是1 //然后运行Fun1(5),由于运行的是B类型对象的Fun2方法,此时的Fun1已经被B覆盖掉了,因此执行的是被覆盖后的方法,运行结果是6 public class A { public virtual void Fun1(int i) { Console.WriteLine(i); } public void Fun2(A a) { a.Fun1(1); Fun1(5); } } public class B : A { public new void Fun1(int i) { base.Fun1(i + 1); } } }