在.NET应用程序中何时应该使用"ReadOnly"属性,何时应该只使用"Get".这两者有什么区别.
private readonly double Fuel= 0;
public double FuelConsumption
{
get
{
return Fuel;
}
}
Run Code Online (Sandbox Code Playgroud)
要么
private double Fuel= 0;
public double FuelConsumption
{
get
{
return Fuel;
}
}
Run Code Online (Sandbox Code Playgroud)
Thi*_*ise 112
仅使用getter创建属性会使您的属性对于类外的任何代码都是只读的.
但是,您可以使用类提供的方法更改值:
public class FuelConsumption {
private double fuel;
public double Fuel
{
get { return this.fuel; }
}
public void FillFuelTank(double amount)
{
this.fuel += amount;
}
}
public static void Main()
{
FuelConsumption f = new FuelConsumption();
double a;
a = f.Fuel; // Will work
f.Fuel = a; // Does not compile
f.FillFuelTank(10); // Value is changed from the method's code
}
Run Code Online (Sandbox Code Playgroud)
将类的私有字段设置为readonly
允许您只设置一次字段值(使用内联赋值或在类构造函数中).您将无法在以后更改它.
public class ReadOnlyFields {
private readonly double a = 2.0;
private readonly double b;
public ReadOnlyFields()
{
this.b = 4.0;
}
}
Run Code Online (Sandbox Code Playgroud)
readonly
类字段通常用于在类构造期间初始化的变量,并且以后永远不会更改.
简而言之,如果您需要确保您的属性值永远不会从外部更改,但您需要能够从类代码中更改它,请使用"Get-only"属性.
如果您需要存储一个值,该值一旦设置了初始值就永远不会改变,请使用一个readonly
字段.
Col*_*nic 12
从C#6开始,您可以在一行中声明并初始化"只读自动属性":
double FuelConsumption { get; } = 2;
Run Code Online (Sandbox Code Playgroud)
您可以从构造函数设置值,但不能设置其他方法.
据说只有吸气剂的属性是只读的.因为没有提供setter来改变属性的值(从外部).
C#有一个关键字readonly,可以在字段(而不是属性)上使用.标记为"只读"的字段只能在构造对象期间(在构造函数中)设置一次.
private string _name = "Foo"; // field for property Name;
private bool _enabled = false; // field for property Enabled;
public string Name{ // This is a readonly property.
get {
return _name;
}
}
public bool Enabled{ // This is a read- and writeable property.
get{
return _enabled;
}
set{
_enabled = value;
}
}
Run Code Online (Sandbox Code Playgroud)