1
我有以下兩類C#6初級男星
public class Point(int x, int y)
{
public int X { get; } = x;
public int Y { get; } = y;
}
public class Point2
{
public int X { get; private set; }
public int Y { get; private set; }
public Point2(int x, int y)
{
this.X = x;
this.Y = y;
}
}
,並使用JetBrains公司dotpeek我拿到的時候反編譯如下:
namespace ConsoleApplication1
{
public class Point
{
public int X
{
get
{
return this.\u003CX\u003Ek__BackingField;
}
}
public int Y
{
get
{
return this.\u003CY\u003Ek__BackingField;
}
}
public Point(int x, int y)
{
}
}
}
和
namespace ConsoleApplication1
{
public class Point2
{
public int X { get; private set; }
public int Y { get; private set; }
public Point2(int x, int y)
{
this.X = x;
this.Y = y;
}
}
}
我無法理解使用主要構造函數的類類,反編譯器在反編譯時爲空。認爲它將和Point2一樣設置後臺字段。 有人可以解釋這一點嗎?
FWIW,[主要構造已不再是C#6.0部分(https://roslyn.codeplex.com/wikipage?title =語言%20Feature%20Status)。 – 2014-11-01 13:57:11
查看[this](http://thomasardal.com/primary-constructors-in-c-6-0/)獲取正確的反編譯代碼。 – 2014-11-01 14:03:23
這是默認的構造函數,沒有顯式構造函數的每個C#類都有一個。由C#編譯器自動生成。你的反編譯器不會說明爲什麼這是必要的,它省略了':base()'。必須確保基礎構造函數也可以運行。你的情況下的System.Object構造函數。使用ildasm.exe可以給你更多的見解,它隱藏較少。 – 2014-11-01 14:04:15