readonly和{get;之间有区别吗?}

Bob*_*Bob 18 c# readonly-attribute

这些陈述是否意味着同样的事情?

int x { get; }
readonly int x;
Run Code Online (Sandbox Code Playgroud)

JLW*_*low 23

在回答你的问题:有是只读的,{获得之间的差异; }:

在int x { get; }(由于没有办法设置x而无法编译 - 我认为你需要public int x { get; private set; })你的代码可以不断改变x

在readonly int x;,x在构造函数或内联中​​初始化,然后永远不会更改.

  • 在C#6.0中,可以在构造函数中设置get-only属性.请参阅[此更近期的问题](http://stackoverflow.com/questions/37496738/c-sharp-readonly-vs-get)以获取更新的答案. (5认同)
  • 使用readonly x只能在构造函数中设置或内联. (4认同)
  • 可能想要澄清它的"否"这些陈述是否意味着相同',但是'是''readonly和{get;之间是否存在差异 }".也许应该更改标题或内联文本以使其更容易混淆. (2认同)
  • 当int x {get;}会导致编译时错误时,这有多少upvotes?这不是抽象的.我们难道不应该指出这是无效的吗? (2认同)

Joh*_*lph 12

readonly int x;在类上声明一个只读字段.此字段只能在构造函数中指定,并且它的值不能在类的生命周期中更改.

int x { get; }声明一个只读自动实现的属性,并且在这种形式下,无效(因为你无法设置该值).普通的只读属性不保证每次调用时都返回相同的值.该值可以在整个生命周期中发生变化.例如:

public int RandomNumber
{
    get { return new Random().Next(100); }
}
Run Code Online (Sandbox Code Playgroud)

每次调用它时都会返回不同的数字.(是的,这是一种可怕的滥用财产).