c#6初级电容器

本文关键字:电容器 c#6 | 更新日期: 2023-09-27 18:28:47

我有以下两个类

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;
    }
  }
}

对于使用主构造函数的Point类,我无法理解反编译时的ctor是空的。我认为它将与Point2相同,在Point2中它将设置支持字段。有人能解释一下吗?

c#6初级电容器

您之所以看不到这一点,是因为初始化后台字段的代码由编译器生成,默认情况下dotPeek不会显示编译器生成的代码。但如果您启用"显示编译器生成的代码",您将看到以下内容:

public class Point
{
    [CompilerGenerated]
    [DebuggerBrowsable(DebuggerBrowsableState.Never)]
    private readonly int 'u003CX'u003Ek__BackingField;
    [CompilerGenerated]
    [DebuggerBrowsable(DebuggerBrowsableState.Never)]
    private readonly int 'u003CY'u003Ek__BackingField;
    public int X
    {
      get
      {
        return this.'u003CX'u003Ek__BackingField;
      }
    }
    public int Y
    {
      get
      {
        return this.'u003CY'u003Ek__BackingField;
      }
    }
    public Point(int x, int y)
    {
      this.'u003CX'u003Ek__BackingField = x;
      this.'u003CY'u003Ek__BackingField = y;
      base.'u002Ector();
    }
}
相关文章: