【问题标题】:Auto-properties and immutable types [duplicate]自动属性和不可变类型
【发布时间】:2013-12-20 19:02:01
【问题描述】:

我按照这种模式编写了大量不可变类型:

class A 
{
  private readonly SomeType b;

  public A(SomeType b)
  {
    this.b = b;
  }

  public SomeType B
  {
    get {return b; }
  }
}

是否可以使用自动属性复制此模式?我能达到的收盘价是:

class A 
{
  public A(SomeType b)
  {
    B = b;
  }

  public SomeType B
  {
    get; private set;
  }
}

但这并不令人满意,因为它不能保证对 B 的引用不会改变(我们实际上丢失了readonly)。有没有可能做得比这更好?

【问题讨论】:

  • 不使用自动属性,除了readonlyconst 之外,C# 中没有其他关键字可以强制执行不变性。你能做的最好的事情就是阻止外部的改变,而不是从内部强制改变。 Roslyn 将来可能会通过检查代码的更改来提供帮助,但默认情况下这不是内置的。

标签: c# .net


【解决方案1】:

当前版本的 C# 不可能比这更好。然而,this blog post 提到了 C# 设计团队在最近的一次会议上讨论的 C# 6 中可能的新特性 - 只读自动属性,这正是您所追求的。

public int X { get; } = x;  

【讨论】:

    猜你喜欢
    • 2011-02-02
    • 1970-01-01
    • 2018-01-12
    • 2016-12-11
    • 1970-01-01
    • 2010-11-29
    • 2018-10-26
    • 2016-02-15
    • 2016-06-14
    相关资源
    最近更新 更多