c# - 什么时候应该使用 Readonly 和 Get only 属性

标签 c# .net

在 .NET 应用程序中,什么时候应该使用“ReadOnly”属性,什么时候应该只使用“Get”。这两者有什么区别。

private readonly double Fuel= 0;

public double FuelConsumption
{
    get
    {
        return Fuel;
    }
}        

private double Fuel= 0;

public double FuelConsumption
{
     get
     {
          return Fuel;
     }
}

最佳答案

创建一个只有 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
}

将类的私有(private)字段设置为readonly 允许您仅在类的构造函数中设置字段值(使用内联赋值或定义的构造函数方法)。 您以后将无法更改它。

public class ReadOnlyFields {
    private readonly double a = 2.0;
    private readonly double b;

    public ReadOnlyFields()
    {
        this.b = 4.0;
    }
}

readonly 类字段通常用于在类构造期间初始化的变量,以后永远不会更改。

简而言之,如果您需要确保您的属性值永远不会从外部更改,但是您需要能够从您的类代码内部更改它,请使用“仅获取"属性。

如果您需要存储一个一旦设置了初始值就永远不会改变的值,请使用readonly 字段。

关于c# - 什么时候应该使用 Readonly 和 Get only 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2719699/

相关文章:

c# - 顺序敏感调用的设计模式

c# - 在代码中设置排序时,ColumnHeader 的箭头不指向任何方向

asp.net - Entity Framework 5 在保存时停止运行 T4 模板文件

c# - 设置线程标识

c# - IL Callvirt 等效?

c# - 如何防止工具提示在自定义控件中闪烁?

c# - 如何使用 C# 在本地自动获取在线 HTML 表

c# - Xamarin 中的 Java.Lang.NullPointerException

c# - 奇数 : @myRecordArray[0] returns invalid pointer if array size is bigger than 4136

.net - Windows 10 上的 SQL Server 2014