簡體   English   中英

C#類實例字段默認值賦值加默認構造函數等於雙賦值?

[英]C# class instance field default value assignment plus default constructor equals double assignment?

我是c#的新手並且讀取了在默認構造函數調用之前初始化了實例字段。 這是否意味着它們被雙重初始化?

class MyClass
{
  public int value;

}

這是否意味着該值獲得默認值0然后調用默認構造函數並再次分配0?

不,除非指定變量初始值設定項,否則編譯器創建的無參數構造函數不會對字段執行賦值。 所以在這樣的類中:

class Test
{
    int a = 0;
    int b = 1;
    int c;
}

...生成的構造函數在IL中看起來像這樣:

.method public hidebysig specialname rtspecialname 
        instance void  .ctor() cil managed
{
  // Code size       22 (0x16)
  .maxstack  8
  IL_0000:  ldarg.0
  IL_0001:  ldc.i4.0
  IL_0002:  stfld      int32 Test::a
  IL_0007:  ldarg.0
  IL_0008:  ldc.i4.1
  IL_0009:  stfld      int32 Test::b
  IL_000e:  ldarg.0
  IL_000f:  call       instance void [mscorlib]System.Object::.ctor()
  IL_0014:  nop
  IL_0015:  ret
} // end of method Test::.ctor

注意ab的分配但不是c 通常,顯式指定值0並將其保留為默認值之間的差異是不可觀察的,但它存在於IL中。 調用基類構造函數之前決定調用某個虛方法的子類可以證明存在差異,但我懷疑這會違反CLS。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM