using System;
public class A
{
public A()
{
PrintFields();
}
public virtual void PrintFields(){}
}
public 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()的时候,输出什么结果?请思考后查看答案:http://www.svnhost.cn/Article/Detail-226.shtml

解决方案 »

  1.   

    就执行public A() 

    PrintFields(); 

    ,B的没处理呢.
      

  2.   

    我做过这样的题,好像是第九城市的笔试题:
    答案是这样的:new B()的时候,产生的是B的实例,B是继承自A,首先初始化类里的“全局变量”x=1,y=0,然后调用父类A的初始化方法A(),再调用B()另外:A()里调用PrintFields(),因为对象是B的实例,而B重写了PrintFields()方法,因此调用PrintFields()方法应该是B的PrintFields(),即执行输出。所以整体流程是:初始化“全局变量”->调用A()->调用Console.WriteLine("x={0},y={1}",x,y);
    输出结果是:x=1,y=0其实问题并不复杂,只是不小心就会错。大家可以用小巧的.NET开发工具SnippetCompiler测试。
      

  3.   

    其实问题并不复杂,只是不小心就会错。大家可以用小巧的.NET开发工具SnippetCompiler测试。 
    貌似是广告。
      

  4.   

    LZ的代码写得也太乱了,整理一下:using System; public class A 

      public A() 
      { 
        PrintFields(); 
      }   public virtual void PrintFields(){} 
    } public 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()的时候,输出什么结果? 
      

  5.   

    在<<.NET本质论>>中看到过类似题目
    经典