class cnc
{
  public int a;
  static void Main()
  {
     cnc bjcnc=new cnc();
     Console.WriteLine(bjcnc.a);
  }
}
问下此时类cnc的字段成员被初始化了吗?
为什么vs会给出警告
说从未对字段“a”赋值,字段将一直保持其默认值“0”编译器警告(等级 4)CS0649  
编译器检测到未初始化且从未被赋值的私有字段声明或内部字段声明。

解决方案 »

  1.   

    警告不等于错误对于类和结构的字段,初始化的时候都会设为0,即对于一般数字型,0,布尔,false,枚举,(E)0,引用类型,null,结构:按上述情形初始化结构各字段后得到的值至于为什么会出这个错误,那是因为编译器的智能;它检测到a的存在是多余的,一般情况下这属于程序员的逻辑性错误,所以予以警告,但不影响编译局部变量的多余体现在声明了但没用过;字段的多余体现在两个部分:1) 声明了但没用过;2) 声明了但只读取过值,没有写过值,并且由于访问修饰符的限制不可能被赋值你提供的例子属于2),因为Console.WriteLine里读取过它了,但是整个程序都没有对它赋值,所以产生警告