使用 { get; 实现只读属性}
Implementing read-only properties with { get; }
为什么这个运行:
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;
}
}
要么将私人 setter 添加到您的 属性:
public string Colour{ get; private set;}
或者添加一个只读的支持字段:
private string _colour;
public string Colour{ get return this._colour; }
public Apple(string colour)
{
this._colour = colour;
}
这里有几个选项:
// Make the string read only after the constructor has set it
private readonly string colour
public string Colour { get { return colour; } }
public Apple(string colour)
{
this.colour = colour;
}
// Make the string only readonly from outside but editing from within the class
public string Colour { get; private set; }
public Apple(string colour)
{
this.Colour= colour;
}
我认为您正在寻找的是这个,它通过仅向外界公开 GET 来保护您的内部变量。为了额外的安全,您可以将 _colour 标记为只读,这样它就不能在 class 本身内更改(在实例化之后),但我认为这太过分了。如果你的苹果变老需要变成棕色怎么办?!
class Program
{
static void Main(string[] args)
{
Apple a = new Apple("green");
}
}
class Apple
{
private string _colour;
public string Colour
{
get
{
return _colour;
}
}
public Apple(string colour)
{
this._colour = colour;
}
}
您的代码对 Visual Studio 2015 附带的 C# 6 有效。不适 对该语言的早期版本或 Visual Studio 有效。从技术上讲,您可以在 VS 2013 中安装 Roslyn 的旧预发布版本,但现在 VS 2015 已发布,不值得这么麻烦。
如果出现此问题,要么是您使用了错误版本的 Visual Studio 来编译 C# 6 代码,要么是您尝试使用错误的开发环境从命令行编译代码 - 即,你的 PATH 指向旧的编译器。也许你打开了 'Developer Command Prompt for 2013' 而不是 2015?
您应该使用 Visual Studio 2015 编译您的代码,或者确保您的路径变量指向最新的编译器。
如果您必须使用 Visual Studio 2013 或更早版本,则必须更改代码以使用更旧的语法,例如:
public readonly string _colour;
public string Colour { get {return _colour;}}
public Apple(string colour)
{
_colour=colour;
}
或
public string Colour {get; private set;}
public Apple(string colour)
{
Colour=colour;
}
请注意,第二个选项不是真正只读的,class 的其他成员仍然可以修改 属性
注意
您可以使用 Visual Studio 2015 来定位 .NET 4.5。语言和运行时 。真正的要求是编译器必须匹配语言版本
为什么这个运行:
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;
}
}
要么将私人 setter 添加到您的 属性:
public string Colour{ get; private set;}
或者添加一个只读的支持字段:
private string _colour;
public string Colour{ get return this._colour; }
public Apple(string colour)
{
this._colour = colour;
}
这里有几个选项:
// Make the string read only after the constructor has set it
private readonly string colour
public string Colour { get { return colour; } }
public Apple(string colour)
{
this.colour = colour;
}
// Make the string only readonly from outside but editing from within the class
public string Colour { get; private set; }
public Apple(string colour)
{
this.Colour= colour;
}
我认为您正在寻找的是这个,它通过仅向外界公开 GET 来保护您的内部变量。为了额外的安全,您可以将 _colour 标记为只读,这样它就不能在 class 本身内更改(在实例化之后),但我认为这太过分了。如果你的苹果变老需要变成棕色怎么办?!
class Program
{
static void Main(string[] args)
{
Apple a = new Apple("green");
}
}
class Apple
{
private string _colour;
public string Colour
{
get
{
return _colour;
}
}
public Apple(string colour)
{
this._colour = colour;
}
}
您的代码对 Visual Studio 2015 附带的 C# 6 有效。不适 对该语言的早期版本或 Visual Studio 有效。从技术上讲,您可以在 VS 2013 中安装 Roslyn 的旧预发布版本,但现在 VS 2015 已发布,不值得这么麻烦。
如果出现此问题,要么是您使用了错误版本的 Visual Studio 来编译 C# 6 代码,要么是您尝试使用错误的开发环境从命令行编译代码 - 即,你的 PATH 指向旧的编译器。也许你打开了 'Developer Command Prompt for 2013' 而不是 2015?
您应该使用 Visual Studio 2015 编译您的代码,或者确保您的路径变量指向最新的编译器。
如果您必须使用 Visual Studio 2013 或更早版本,则必须更改代码以使用更旧的语法,例如:
public readonly string _colour;
public string Colour { get {return _colour;}}
public Apple(string colour)
{
_colour=colour;
}
或
public string Colour {get; private set;}
public Apple(string colour)
{
Colour=colour;
}
请注意,第二个选项不是真正只读的,class 的其他成员仍然可以修改 属性
注意
您可以使用 Visual Studio 2015 来定位 .NET 4.5。语言和运行时