使用{get;实现只读属性 }

why*_*heq 3 c# .net-4.5 visual-studio-2012

为什么不运行:

  class Program
  {
    static void Main(string[] args)
    {
      Apple a = new Apple("green");
    }
  }

  class Apple
  {

    public string Colour{ get; }

    public Apple(string colour)
    {
      this.Colour = colour;
    }

  }
Run Code Online (Sandbox Code Playgroud)

Pan*_*vos 9

您的代码有效期为C#6,附带的Visual Studio 2015,是不是有效的语言或Visual Studio的早期版本.从技术上讲,你可以在VS 2013中安装一个旧的预发布版本的Roslyn,但现在VS 2015发布并不值得.

要发生此问题,要么使用错误版本的Visual Studio来编译C#6代码,要么尝试使用错误的开发环境从命令行编译代码-ie,您的PATH指向旧编译器.也许您打开了"2013年开发人员命令提示"而不是2015年?

您应该使用Visual Studio 2015编译代码,或者确保路径变量指向最新的编译器.

如果必须使用Visual Studio 2013或更早版本,则必须更改代码以使用旧语法,例如:

public readonly string _colour;

public string Colour { get {return _colour;}}

public Apple(string colour)
{
    _colour=colour;
}
Run Code Online (Sandbox Code Playgroud)

要么

public string Colour {get; private set;}

public Apple(string colour)
{
    Colour=colour;
}
Run Code Online (Sandbox Code Playgroud)

请注意,第二个选项不是真正的只读,类的其他成员仍然可以修改属性

注意

您可以使用Visual Studio 2015来定位.NET 4.5.语言和运行时是两回事.真正的要求是编译器必须匹配语言版本