有什么理由使用自动实现的属性而不是手动实现的属性?

2023-12-13

我理解属性相对于字段的优势,但我觉得使用自动实现的属性而不是手动实现的属性除了使代码看起来更简洁之外并没有真正提供任何优势。

我感觉使用起来更舒服:

    private string _postalCode;

    public string PostalCode
    {
        get { return _postalCode; }
        set { _postalCode = value; }
    }

代替:

public string PostalCode { get; set; }

主要是因为如果我想要对 get 和 set 进行任何类型的自定义实现,我就必须创建自己的属性,无论如何都由私有字段支持。那么,为什么不从一开始就咬紧牙关,立即赋予所有属性这种灵活性,以保持一致性呢?考虑到您在 Visual Studio 中所要做的就是单击您的私有字段名称,然后按 Ctrl+E,就完成了,这实际上不需要多花一秒钟。如果我手动执行此操作,那么最终会出现不一致,其中有一些由私有字段支持的手动创建的公共属性,以及一些自动实现的属性。我感觉好多了,因为它始终保持一致,无论是全自动还是全手动。

这只是我吗?我错过了什么吗?我是不是误会了什么?我是否过于强调一致性?我总能找到有关 C# 功能的合法讨论,并且几乎所有事物都有利有弊,但在这种情况下,我真的找不到任何人建议反对使用自动实现的属性。


除了简洁之外,它不会给你任何额外的东西。如果您更喜欢更详细的语法,那么请务必使用它。

使用 auto props 的一个优点是,它可以避免您犯下愚蠢的编码错误,例如意外地将错误的私有变量分配给属性。相信我,我以前就这么做过!

您关于自动道具不太灵活的观点是一个很好的观点。您拥有的唯一灵活性是使用private get or private set以限制范围。如果你的 getter 或 setter 有任何复杂性,那么 auto 道具就不再是一个可行的选择。

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

有什么理由使用自动实现的属性而不是手动实现的属性? 的相关文章

随机推荐

  • 定期将大数据 (json) 导入 Firebase

    我们面临的情况是 我们必须定期更新 firebase 中的大量数据 大约 5 个 Mio 记录 目前我们有一些大小约为 1 GB 的 json 文件 作为现有的第三方解决方案 here and here 存在一些可靠性问题 每个对象导入对象
  • 删除 XML 标签及其内容之间的任何内容

    我需要删除 XML 标记之间的任何内容 尤其是空格和换行符 例如 从以下位置删除空格和换行符 节点 gt n to get 节点 gt 这并不是为了手动解析 XML 而是在 XML 数据被工具解析之前准备好 更具体地说 我正在使用 Hpri
  • 不支持 URL 格式

    我正在使用 File OpenRead 方法读取文件 我给出这个路径 http localhost 10001 MyFiles folder abc png 我也尝试过这个 但没有运气 http localhost 10001 MyFile
  • 即使我删除了 Google 表单的所有脚本后,我仍然收到“Google Apps 脚本失败摘要:脚本”错误消息

    我最近尝试使用 GoogleForms 中的脚本将所有结果通过电子邮件发送到我的帐户 但它不起作用并不断向我发送错误电子邮件 所以我删除了所有脚本 为我创建的所有 GoogleForms 创建了新的电子表格 但我仍然收到这些错误电子邮件 看
  • 如何在 Matlab 中将 Kinect 原始深度信息转换为米?

    我在这里做了一些研究来理解这个主题 但没有取得好的结果 我正在使用 Kinect for Windows 和 Kinect SDK 1 7 我正在使用 matlab 来处理原始深度图信息 首先 我使用这种方法 https stackover
  • 匿名类可以完全不可变吗?

    在 Java Concurrency In Practice 一书中 有一个几乎不可变对象的示例 如果未正确发布 该对象将面临失败的风险 Taken from Java Concurrency In Practice p 51 Listin
  • 在 Angular JS 中传递值

    我是 Angular JS 的新手 我在index html 页面中创建了一个表单 当我在表单中填写详细信息并按提交时 它应该重定向到details html 页面 我可以在哪里显示表格上填写的详细信息 HTML div class for
  • Obj-C,当“self”未设置为“[(super or self) init...]”的结果时使用的实例变量

    我知道不久前我问过类似的问题 但我仍然有点不确定 同样的事情在很多地方都发生过 当 self 未设置为 super or self init 的结果时使用的实例变量 A id initWithCoder NSCoder decoder if
  • Eclemma 不提供报告导出选项

    我确信我犯了某种菜鸟错误 但我现在第一次使用 EclEmma 尽管检查了大量指南 但仍无法弄清楚如何导出我的覆盖率报告 作为参考 这是在 Windows 8 x64 上并使用 Eclipse Kepler 如果您需要更多信息 请告诉我 我可
  • Android平台上使用altbeacon库对Eddystone信标进行后台监控

    是否有后台监控Eddystone在android平台上使用altbeacon库的beacon可能吗 我怎样才能实现它 以下是我可以在应用程序启动时检测具有指定 UUID 的信标的代码 但我想在应用程序未运行时实现相同的目标 public c
  • 将 JAXB 和 JAXWS 组合起来以生成导入的 XML 模式

    使用 wsimport 时 如何为 WSDL 中导入的 XSD 指定 JAXB 绑定 我尝试了以下绑定 这会导致错误 xs element name isFoobar 的 XPath 计算导致空目标节点
  • 实现 ApplicationContextAware - ApplicationContext 为 NULL

    我正在编写一个 Tomcat 应用程序 它充当一些内部服务的代理 我已将 Spring 项目从混合 XML 和基于注释的配置切换为 Java 和基于注释的配置 在切换配置风格之前 该应用程序运行良好 现在我有两个问题 在我的两个过滤器中执行
  • 在没有 apache 虚拟主机的情况下安装 zend 框架

    我的网站位于 var www invent 我在 var www invent library 中有 zend framework 基本上我想要的是当我访问时http localhost invent就像我在 apache conf 文件中
  • 将第二个重复项中的值移动到第一个重复项中

    这篇文章是将最后一行的值分配给第一行 将最后一个值移动到第一个值 我想将第二个重复项中的值移至第一个重复项 并将其他值设置为 NaT ID OutBedTime DateOutBed 1 16 05 2018 0 17 16 05 2018
  • 关于 String.replaceAll() 和 String.replaceFirst() 方法的问题

    我需要对一段字符串执行简单的字符串替换操作 我遇到了以下问题 希望得到一些建议 在我得到的原始字符串中 我可以替换字符串 例如 div class more 到别的东西 但是 在同一个原始字符串中 如果我想替换一个很长的字符串 如下所示 这
  • 如何在 Flutter 中的应用程序启动时显示弹出窗口

    我想在 Flutter 中的应用程序加载 或者说每次用户打开应用程序时 添加一个弹出窗口 有人能帮我吗 我知道我必须使用 AlertDialog 小部件 但我找不到合适的条件来确定应用程序启动触发器 非常感谢任何帮助 您可以使用共享偏好设置
  • 删除标签但保留php中标签之间的字符串

    我有从其他网站获取内容的文件 它包括很多 我想删除但使用 PHP 保留它们之间的内容 随机 字符串 注意 str replace 可以删除它们 但可能会影响其他脚本
  • Cordova:通过 HTTPS 请求数据时 Android 上的 CSP 问题

    CordovaAndroid 是一个 Android 应用程序库 允许 为 Android 平台构建的基于 Cordova 的项目 科尔多瓦 基于应用程序的核心是用 Web 编写的应用程序 技术 HTML CSS 和 JavaScript
  • 获取 Javascript 变量的 HTML h1 值

    如果我希望将分配给 header h3 的标题值成为 JavaScript 变量 以将信息从本地存储中的特定条目中取出 我该怎么做 这实际上取决于您的用例 最好的方法是什么 如果您提供更多的代码 社区可能会更好地为您提供帮助 一般来说 您可
  • 有什么理由使用自动实现的属性而不是手动实现的属性?

    我理解属性相对于字段的优势 但我觉得使用自动实现的属性而不是手动实现的属性除了使代码看起来更简洁之外并没有真正提供任何优势 我感觉使用起来更舒服 private string postalCode public string PostalC