本帖最后由 贡宗新 于 2013-5-12 13:39 编辑
有时候这种迷惑人的问题真让人头晕,大家帮忙分析一下,
不使用多态的时候:- class A
- {
- public void Fun()
- {
- Console.WriteLine("I am F");
- }
- }
- class Program:A
- {
- static void Main(string[] args)
- {
- Program p = new Program();
- p.Fun();
- Console.Read();
- }
- }
- //结果为:I am F
复制代码 使用new来隐藏父类方法,所以调用的时候就直接调用子类方法:- class A
- {
- public void Fun()
- {
- Console.WriteLine("I am F");
- }
- }
- class Program:A
- {
- public new void Fun()
- {
- int i = 1;
- Console.WriteLine("I am F,i={0}", i);
- }
- static void Main(string[] args)
- {
- Program p = new Program();
- p.Fun();
- Console.Read();
- }
- }
- //结果为:I am F,i=1
复制代码 当使用虚方法重写时:也是直接调用子类方法- class A
- {
- public virtual void Fun()
- {
- Console.WriteLine("I am F");
- }
- }
- class Program:A
- {
- public override void Fun()
- {
- int i = 1;
- Console.WriteLine("I am F,i={0}", i);
- }
- static void Main(string[] args)
- {
- A p = new Program();
- p.Fun();
- Console.Read();
- }
- }
- //结果是I am F,i=1;
复制代码 但是,当父类是虚方法,子类是new(隐藏了父类方法,不知道这样说准不准确):结果为什么是父类的结果:不明白???- class A
- {
- public virtual void Fun()
- {
- Console.WriteLine("I am F");
- }
- }
- class Program:A
- {
- public new void Fun()
- {
- int i = 1;
- Console.WriteLine("I am F,i={0}", i);
- }
- static void Main(string[] args)
- {
- A p = new Program();
- p.Fun();
- Console.Read();
- }
- }
- //结果为 I am F
复制代码 当基类函数是虚函数时,子类函数不是重写,而是覆盖了基函数的同名函数。这句话怎么理解
|