何时应使用 Readonly 和 Get only 属性

2023-12-23

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

private readonly double Fuel= 0;

public double FuelConsumption
{
    get
    {
        return Fuel;
    }
}        

or

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
}

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

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

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

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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

何时应使用 Readonly 和 Get only 属性 的相关文章

随机推荐

  • 找到两个节点(顶点)之间的最短路径

    我有一个互连边的列表 E 如何找到从一个顶点连接到另一个顶点的最短路径 我正在考虑使用 但边缘没有明确定义的根 所以我认为该解决方案不起作用 最短路径由经过的最少顶点数定义 Note There could be a multi path
  • MySQL获取两列之间的所有唯一值

    我有一个包含 ID 的两列的表 我想查询该表以显示两列中每个 ID 的一个列表 TABLE A B 1 2 2 3 5 4 6 2 我希望结果是 TABLE A 1 2 3 5 4 6 使用 UNION 运算符 SELECT A FROM
  • Spring-Batch 复合编写器如何跳过异常

    我正在使用 Spring Batch 我的步骤配置如下 Bean public Step testStep JdbcCursorItemReader
  • Azure 模拟器卡住

    我正在从事 azure WorkerRole 项目VS2015 SDK 2 9 该角色在云中运行良好 但是当我尝试使用 FullEmulator 在本地运行它时 角色无法启动 面料 角色实例 部署29 116 MyComp Engine D
  • PresentModalViewController 使我的应用程序崩溃

    我知道 这是最简单的事情之一 但几天来我一直在努力反对这一点 我过去已经做过很多次了 但由于某种原因 尝试呈现模式视图控制器只会使应用程序崩溃到黑屏 控制台中没有报告任何内容 我希望有人可能遇到过这个问题并提供一些建议 此代码是从 UIVi
  • 如何使用 angular.foreach 比较两个 JavaScript 数组

    我有两个 javascript 对象 var obj1 key1 value1 key2 value2 And var obj2 key1 value1 key2 someOtherValue 正如您所看到的 两个对象之间存在一个差异key
  • 用于在字段级别区分 CSV 文件并将结果输出到 CSV 并保持颜色的工具

    我正在尝试比较 2 个 csv 文件在字段级别的差异 并用颜色编码差异 我尝试了这个命令 git diff color words space x csv y csv 但有两个问题 它将彼此不同的单元格数据放在一起 我不想要这样 我只需要在
  • 创建新工作区

    Modeshape 文档的第 7 1 6 节说 您的应用程序现在可以使用标准 JCR 2 0 API 创建和删除工作区 JCR 2 0 文档说使用 Workspace createWorkspace String name 如何使用本文底部
  • addClass(“test”)给出错误:TypeError:未定义不是函数

    在控制台中我有 myCssClass 0 parentNode li span class myCssClass some text span li 我想为父级添加 css 类span 对于标签 li 我尝试这样 myCssClass 0
  • Android:如何根据设备时区获取默认日期格式

    有没有简单的方法可以根据用户的时区获取默认日期格式 The SimpleDateFormat 给出根据用户区域设置的日期格式 我正在寻找一种场景 需要将提供的日期转换为基于时区的日期格式 例如 用户将其区域设置设置为 中文 并且采用德国时区
  • Java 最小化依赖关系

    我遇到过这样的情况 一小段Java代码有大量依赖的jar 然而 这些 jar 内部的依赖关系非常浅 在大多数情况下 它仅依赖于单个接口的 jar 我不想将所有 jar 与应用程序一起分发 而是只想将特定的类文件分发到它实际使用的 jar 中
  • 记录 JUnit 测试运行所需的时间

    我想记录我的 JUnit 测试以编程方式运行需要多长时间 我在各种测试类中有大量测试 我想了解每个单独的测试方法运行需要多长时间 我可以更改继承结构或以不同方式注释方法 但我希望避免在测试方法本身以及用于设置测试业务逻辑的之前 之后方法中添
  • Git 说是最新的,尽管更改是远程进行的

    使用 git bash 我在我的主分支上工作 推送它并决定我想要实现一个新功能 我为此创建了一个新分支 后来我添加了另一个功能 创建了另一个分支 我测试了所有内容并且它正常工作 所以我决定将所有内容合并到我的主分支 我将两个新分支推送到远程
  • 如何将.plist文件中的数据结构读取到NSArray中

    我正在使用以下内容手动创建数据结构 NSDictionary league1 NSDictionary alloc initWithObjectsAndKeys Barclays Premier League name Premier Le
  • 如何从路径中删除 Microsoft.PowerShell.Core\FileSystem::\\

    我正在使用 powershell 与文件夹及其所有子文件夹进行比较 并且它在我的本地计算机上工作正常 但是当我在服务器上尝试它时 它给了我错误并附加 Microsoft PowerShell Core FileSystem 到所有文件 如果
  • 如何使用 PHP 将元素添加到 JSON 对象? [复制]

    这个问题在这里已经有答案了 我有这个 JSON 数组 我想使用 PHP 向其中添加另一个值 使用 PHP 将 ID 和名称添加到该数组的最简单方法是什么 id 1 name Charlie id 2 name Brown id 3 name
  • 获取node.js应用程序的最大堆大小

    现在我在paas平台上使用node js 并且容器有内存限制 现在我想获取node js应用程序的堆大小的最大值 我知道使用参数 max old space size 我可以设置最大堆大小 但我想知道如何获取 max old space s
  • Selenium Webdriver sendkeys 在 IE9.0 中不触发 onchange 事件

    我正在使用 Java 为 ExtJs 中构建的应用程序编写 Selenium 测试脚本 我在附加到 onchange 事件的页面之一中有一个输入字段 每当用户修改字段中的文本时 就会触发 onchange 事件 我正在使用 WebDrive
  • 在 PyDev 控制台中停止正在运行的命令

    我使用 PyDev 控制台运行长脚本 并且经常希望在命令中间停止 在常规 python shell 中 我按 ctrl c 它会通过键盘中断停止命令 但在 PyDev 控制台中 它会进行文本复制 如何停止此控制台中的命令而不终止它 如果您使
  • 何时应使用 Readonly 和 Get only 属性

    在 NET 应用程序中 何时应使用 ReadOnly 属性 何时应仅使用 Get 这两者有什么区别呢 private readonly double Fuel 0 public double FuelConsumption get retu