17.abstract class BaseClass
{
    public virtual void MethodA()
    {
    }
    public virtual void MethodB()
    {
    }
}
class Class1: BaseClass
{
    public void MethodA(string arg)
    {
    }
    public override void MethodB()
    {
    }
}
class Class2: Class1
{
    new public void MethodB()
    {
    }
}
class MainClass
{
    public static void Main(string[] args)
    {
        Class2 o = new Class2();
        Console.WriteLine(o.MethodA());
    }
}
请问,o.MethodA调用的是: (A)
A.BaseClass.MethodA
B.Class2.MethodA
C.Class1.MethodA
D.都不是
为什么选A,不太理解
我的理解:是不是因为 Class1 的MethodA()方法没有用 new 隐藏或用 override,所以才调用 BaseClass.MethodA()方法?  哪位大哥帮忙看看,最好说的详细点儿,谢啦.
16.class Class1
{
    private static int count = 0;
    static Class1()
    {
        count++;
    }
    public Class1()
    {
        count++;
    }
}
Class1 o1 = new Class1();
Class1 o2 = new Class1();
请问,o1.Count的值是多少?(C)
A.1         B.2             C.3             D.4这个题我感觉是选D,哪位大哥帮忙看看,最好说的详细点儿,谢啦.
第3题:
using System;
class A
{
  public A()
  {
    PrintFields();
  }  public virtual void PrintFields()
  {}
}class B:A
{
  int x=1;
  int y;
  public B()
  {
    y=-1;
  }  public override void PrintFields() 
  {
    Console.WriteLine("x={0},y={1}",x,y);
  }
}当使用new B()创建B的实例时,产生什么输出?X=1,Y=0我的理解:实例化 B 对象,先去调用 A 的构造函数,A 的构造函数调用自身PrintFields()函数,可我感觉这个函数什么也没做,类B的构造函数也没有调用PrintFields()函数,所以我感觉不执行打印函数.为什么会有打印输出? 谢大哥们帮忙.

解决方案 »

  1.   

    第1题 
    class MainClass
    {
        public static void Main(string[] args)
        {
            Class2 o = new Class2();
            Console.WriteLine(o.MethodA());
        }
    }
    class2 继承了class1,BaseClass  o.MethodA()这个方法没有参数,所以用的是BaseClass的方法 所以选A
      

  2.   

    哦,没看清楚,原来是调用没有参数的函数.可我总感觉Class1 的MethodA()方法没有用 new 隐藏或用 override 重写 MethodA() 方法很别扭,看过的书好象没有这么写的.如果 Class1 里的 MethodA() 也是个无参的函数,那么 Class2 实例化的对象是不是要调用 Class1 的 MethodA() 函数?
    (手头没开发环境,没法试,大哥们帮忙给看看,谢啦)
      

  3.   

    3 new B()创建B的实例时,产生什么输出?
    =========================================
    x =1 y =0new B()后首先执行
    int x=1;
    int y;
    再执行B的构造函数时会调用基类构造函数先 于是执行
    public A()
      {
        PrintFields();
      }
    而A中的PrintFields方法是virtual方法且B中已经用override关键字实现了该方法 于是会执行子类B中的PrintFields方法 Console.WriteLine("x={0},y={1}",x,y); //注意此时还没有执行到B的构造函数 所以 y值为0而后才执行到B的构造函数//此时 x=1 y =-1;
      

  4.   

    第2题 static构造在类第一次被使用时执行---只执行一次 
    第3题 注意PrintFields是virtual 并在class B中重写。 所以实际上会调用B.PrintFields;而成员初始化代码会在构造函数之前执行,所以执行基类构造函数A()时X的值为1 而此时B()还没有执行 所以Y保持默认初始化的值0.