有没有办法让readonly(不仅仅是私有)自动属性?

自动属性让我替换此代码:

private MyType myProperty; public MyType MyProperty { get { return myPropertyField; } } 

使用此代码:

 public MyType MyProperty { get; private set; } 

这里和那里有一些变化 – 但有没有办法替换这个代码:

 private readonly MyType myProperty; public MyType MyProperty { get { return myPropertyField; } } 

有类似的东西?

不,但是这个想法正在跟踪Connect 。

实际上,目前没有办法做到这一点。

我们意识到在C#3中我们产生了一些哲学上的矛盾。 LINQ的设计沉浸在传统的不可变函数式编程中 – 执行被推迟,查询由不可变monad表示,表达式树是不可变的,等等。

然而,同时对象初始化器,集合初始化器和自动道具都鼓励传统的基于可变组件的编程风格。 看起来我们正朝两个方向努力 – 这表明了C#的本质; 它是一种实用的编程语言,支持许多不同的编程风格。

然而,由于我们都是不可改变的编程风格的忠实粉丝,并且因为我们相信这种风格将使得在未来无处不在的多核架构中更容易确保大规模multithreading应用程序的正确性会带来好处,我们肯定会感兴趣找出一些方法来驯服我们引入的可变性。 只读autoprops是一种明显的方法; 一小步,但一个好的一步。

总而言之,我们还没有发布C#4,并且还没有宣布之后会有任何新的语言function。 您应该将我所有关于未宣布产品的假设特征的思考视为“仅用于娱乐目的”的推测,而不是承诺或公告。

不,不幸的是没有。 我非常喜欢这个function,它看起来像这样:

 public readonly string Name { get; } 

或者(有点奇怪)

 public readonly string Name { get; readonly set; } 

这将被转换成类似的东西:

 private readonly string <>_Name; public string Name { get { return <>_Name; } } 

扭曲是允许setter调用 – 但仅限于构造函数。 此类调用将直接转换为支持字段的分配。

亲爱的,我非常喜欢这样的function。 也许是C#5 ……

readonly只能应用于字段,所以我不相信。

你能不能只使用:

 public readonly MyType MyProperty; 

因为它只能从构造函数中分配出来?

不,你无法做到这一点。 事实上,我不明白为什么你想获得一个以前没有设置的属性的值。 出于显而易见的原因,如果既没有set访问者,也没有支持字段,则无法设置该值。

那真是令人费解的伙伴。

只需将其设为公共只读字段即可。