A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

求C#程序执行过程,步骤和结果。
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 override void Fun1(int i)   
       {
            base.Fun1 (i + 1);
        }
        public static void Main()   
       {
            B b = new B();
            A a = new A();
            a.Fun2(b);
            b.Fun2(a);         
        }
}

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

5 个回复

正序浏览
陈冲 发表于 2012-7-17 13:48
1.使用类B实例化对象b
2.使用类A实例化对象a
3.a.Fun2(b),调用a中的Fun1()方法,将对象b传给形参a,并向上 ...

谢谢你,回答的太棒了!
回复 使用道具 举报
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;

  4. namespace Test
  5. {
  6.     class Program
  7.     {
  8.         static void Main(string[] args)
  9.         {
  10.             B b = new B();
  11.             A a = new A();
  12.             a.Fun2(b);
  13.             b.Fun2(a);

  14.         }
  15.         public class A
  16.         {
  17.             public virtual void Fun1(int i)
  18.             {
  19.                 Console.WriteLine(i);
  20.             }
  21.             public void Fun2(A a)
  22.             {
  23.                 a.Fun1(1);
  24.                 this.Fun1(5);//实际上在Fun1()前省略了this
  25.             }
  26.         }

  27.         public class B : A
  28.         {
  29.             public override void Fun1(int i)
  30.             {
  31.                 base.Fun1(i + 1);
  32.             }
  33.         }

  34.     }
  35. }

复制代码
1.使用类B实例化对象b
2.使用类A实例化对象a
3.a.Fun2(b),调用a中的Fun1()方法,将对象b传给形参a,并向上转型;
    a)执行a.Fun1(1),该方法中的a指向的实际上是对象b,故调用B中的方法Fun1(1),又base.Fun1(2)调用父类中的方法Fun(2),输出2;
    b)执行Fun(5),这里实际上是this.Fun(5),这里没有使用a对象调用函数,直接在A中寻找Fun1(5),输出5;
4.b.Fun2(a),调用b中的Fun1()方法,将对象a传给形参b,并向下转型;
    a)执行a.Fun(1),该方法中的b指向的实际上是对象a,故调用A中的方法Fun1(1),输出1;
    b)执行Fun(5),这里实际上this.Fun(5),this代表的是对象b,故调用B中的方法Fun(5),又base.Fun(6)调用父类中的方法Fun(6),输出6

最后输出结果应该是 2 5 1 6

个人观点,仅供参考
如有错误,欢迎指出

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
陈冲 发表于 2012-7-17 11:59
这个昨天不是发过了?


程序结构变了!
回复 使用道具 举报
陈冲 发表于 2012-7-17 11:59
这个昨天不是发过了?

程序变了!
回复 使用道具 举报
这个昨天不是发过了?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马