C# 2017:只读字段和仅getter自动属性之间有区别吗?

C# 2017:只读字段和仅getter自动属性之间有区别吗?,c#,C#,是的,我在谷歌上搜索了这个问题,但我找到的答案只是指过去的日子,在只有getter的自动属性出现之前 今天,在C#中,您可以声明: class Test { readonly int MyField; int MyProperty { get; } public Test() { MyField = 42; MyProperty = 47; } } 这两个声明只能在声明行或构造函数中初始化,如上所示 这两者之间还有相关的区别吗?一个是属性,另一个是字段(例

是的,我在谷歌上搜索了这个问题,但我找到的答案只是指过去的日子,在只有getter的自动属性出现之前

今天,在C#中,您可以声明:

class Test
{
  readonly int MyField;
  int MyProperty { get; }

  public Test()
  {
    MyField = 42;
    MyProperty = 47;
  }
}
这两个声明只能在声明行或构造函数中初始化,如上所示


这两者之间还有相关的区别吗?一个是属性,另一个是字段(例如,在某些情况下,接口声明除外)。你在寻找什么其他的“区别”呢?我认为这是这个问题的重复:@Evkyes@DeeJ.Doena您可以签入ILSpy或类似程序。我刚刚粘贴了您的代码,并使用ILSpy检查了它。两个都生成一个.field private initonly int32字段,但其中一个生成了访问它的属性方法。@DeeJ.Doena readonly属性编译为readonly字段,并使用getter返回它。所以基本上和我上面提到的情况一样,一个是属性,另一个是字段。你在寻找什么其他的“区别”呢?我认为这是这个问题的重复:@Evkyes@DeeJ.Doena您可以签入ILSpy或类似程序。我刚刚粘贴了您的代码,并使用ILSpy检查了它。两个都生成一个.field private initonly int32字段,但其中一个生成了访问它的属性方法。@DeeJ.Doena readonly属性编译为readonly字段,并使用getter返回它。所以基本上和我上面提到的问题一样。