什么准则适合确定何时将类成员实现为属性还是方法?

2023-12-29

The 已开始出现在“赞助者”区域中的信息似乎表明该属性仅适用于逻辑数据成员(请参阅文档的第 34-35 页)。在以下情况下,方法被认为是适当的:

  • 该操作是一个转换,例如Object.ToString()。
  • 该操作的成本足够高,您希望告知用户他们应该考虑缓存结果。
  • 使用 get 访问器获取属性值会产生明显的副作用。
  • 连续两次调用该成员会产生不同的结果。
  • 执行顺序很重要。
  • 该成员是静态的,但返回一个可以更改的值。
  • 该成员返回一个数组。

大多数开发人员是否同意上述属性与方法的争论?如果是这样,为什么?如果没有,为什么不呢?


它们看起来很合理,并且基本上符合 MSDN 会员设计指南:

http://msdn.microsoft.com/en-us/library/ms229059.aspx http://msdn.microsoft.com/en-us/library/ms229059.aspx

人们有时似乎忘记的一点 (*) 是调用者应该能够以任何顺序设置属性。对于支持设计器的类尤其重要,因为您无法确定生成的代码设置属性的顺序。

(*) 我记得 Codeplex 上的 Ajax 控制工具包的早期版本有许多错误,因为开发人员忘记了这一点。

至于“连续两次调用该成员会产生不同的结果”,每个规则都有一个例外,如属性 DateTime.Now 所示。

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

什么准则适合确定何时将类成员实现为属性还是方法? 的相关文章

  • 为什么 LinkedList 通常比 List 慢?

    我开始在我的一些 C 算法中使用一些 LinkedList 而不是列表 希望能够加快速度 然而 我注意到他们只是感觉更慢 像任何优秀的开发人员一样 我认为我应该尽职调查并验证我的感受 所以我决定对一些简单的循环进行基准测试 我认为用一些随机
  • 禁用除滚动之外的 DataGridView

    我如何配置 datagridview 以便用户只能在行中移动并使用滚动 而没有其他 如果我禁用网格不允许我使用滚动 将您的 datagridview 设置为只读 这将禁用任何编辑 dataGridView1 ReadOnly true 在你
  • TestMethod:异步任务 TestSth() 不适用于 .NET 4.0

    我正在尝试使用 NET 4 0 BCL Async 和 MsTest 运行异步测试方法 看来这个设置不能处理 测试方法 异步Task测试Sth 由于测试用例资源管理器中缺少条目 将签名更改为异步后void 我可以运行测试用例 但结果错误 根
  • 实体框架7审计日志

    我正在将一个旧项目移植到 ASP NET 5 和 Entity Framework 7 我使用数据库优先方法 DNX 脚手架 来创建模型 旧项目基于Entity Framework 4 审计跟踪是通过重写实现的SaveChanges的方法D
  • 未定义异常变量时通过引用捕获

    捕获异常时 标准指导是按值抛出 按引用捕获 据我了解 这有两个原因 如果由于内存不足异常而引发异常 我们将不会调用可能终止程序的复制构造函数 如果异常是继承层次结构的一部分 我们可能会对异常进行对象切片 如果我们有一个场景 我们没有在 ca
  • initializer_list 和默认构造函数重载决策

    include
  • 为什么在 .net 中使用 Invoke on Controls? [复制]

    这个问题在这里已经有答案了 可能的重复 为什么 NET不允许跨线程操作 https stackoverflow com questions 2896504 why net does not allow cross thread operat
  • 在 C# 中生成随机值

    如何使用以下命令生成随机 Int64 和 UInt64 值RandomC 中的类 这应该可以解决问题 这是一个扩展方法 因此您可以像调用普通方法一样调用它Next or NextDouble上的方法Random目的 public stati
  • AspNetCore.SignalR:无法启动未处于初始状态的连接

    我无法让 ASP NET Core SignalR 应用程序正常运行 我有这个服务器端代码 public class PopcornHub Hub private int Users public async Task BroadcastN
  • 从存储过程返回 int 值并在 ASP.NET 代码中检查它以验证登录表单

    当我多次尝试但没有得到有效结果时 使此代码运行的真实顺序是什么 SQL存储过程的代码 set ANSI NULLS ON set QUOTED IDENTIFIER ON GO ALTER PROC dbo login proc usern
  • 打破条件变量死锁

    我遇到这样的情况 线程 1 正在等待条件变量 A 该变量应该由线程 2 唤醒 现在线程 2 正在等待条件变量 B 该变量应该由线程 1 唤醒 在我使用的场景中条件变量 我无法避免这样的死锁情况 我检测到循环 死锁 并终止死锁参与者的线程之一
  • IEnumerable.比带中断的 for 循环更快吗?

    我们的代码打开表单时遇到了一些缓慢的情况 这可能是由于for循环与break这需要很长时间才能执行 我把它切换到IEnumerable Any 并看到表格很快打开 我现在试图弄清楚是否单独进行此更改会提高性能 或者是否正在访问Product
  • C# - 命名空间内的类型声明

    在命名空间内而不是在类中声明类型的可能用途是什么 For ex namespace Test public delegate void Ispossible 这是有效的并且不会产生任何编译错误 但我无法想象为什么我们会以这种方式声明它而不是
  • Unity 2.0 和处理 IDisposable 类型(特别是使用 PerThreadLifetimeManager)

    我知道类似的问题被问过好几次 例如 here https stackoverflow com questions 987761 how do you reconcile idisposable and ioc here https stac
  • 如何使用eclipse构建C++应用程序

    我已经从以下位置下载了 Eclipse Juno for C here http www eclipse org downloads download php file technology epp downloads release ju
  • 使 C# 编译器相信执行将在成员返回后停止

    我认为目前这是不可能的 或者这是否是一个好主意 但这是我刚才正在考虑的事情 我使用 MSTest 对我的 C 项目进行单元测试 在我的一项测试中 我执行以下操作 MyClass instance try instance getValue
  • 为什么从绑定返回的对象会忽略额外的参数?

    假设我有一个带有两个参数的函数 void f int x int y 我想绑定其中之一 我可以用std bind如下 auto partiallyBoundF std bind f 10 1 partiallyBoundF仅需要一个参数 但
  • 无效的模板相关成员函数模板推导 - 认为我正在尝试使用 std::set

    我有一个继承自基类模板的类模板 基类模板有一个数据成员和一个成员函数模板 我想从我的超类中调用它 我知道为了消除对成员函数模板的调用的歧义 我必须使用template关键字 我必须明确引用this在超级班里 this gt base mem
  • 计算两个日期之间的工作日数?

    在C 中 如何计算business 或工作日 两个日期之间的天数 我以前曾经遇到过这样的任务 并且我已经找到了解决方案 当可以避免的时候 我会避免列举其间的所有日子 这里就是这种情况 正如我在上面的一个答案中看到的那样 我什至没有提到创建一
  • XmlDocument Save 使文件保持打开状态

    我有一个简单的 C 函数 可以创建一个基本的 XML 文件并保存 private void CreateXMlFile string Filename string Name string Company XmlDocument doc n

随机推荐

  • 当 xsl 本身第一页就足够时避免第二页

    我已经找到了问题的解决方案 要感谢你们所有人 因为如果没有你们及时的解决方案和建议 这是不可能实现和解决的 非常感谢 这个问题的解决方案已经实现 非常感谢 要解决您的问题 请将以下所有内容保留在单个表中并将其添加到表标题中 参考您的 xsl
  • JavaScript 正则表达式捕获小数点的重复部分

    寻找最佳方法来获取具有可能重复的小数部分的任意数字 并发现重复部分 如果存在 最终 我需要用上划线符号 使用 css 文本装饰或 MathML mline 来装饰数字 所以我还需要知道重复开始的索引 所以我需要正则表达式来得到 或者可以在算
  • 无法将有序数据写入 Spark 中的镶木地板

    我正在使用 Apache Spark 生成镶木地板文件 我可以按日期对它们进行分区 没有任何问题 但在内部我似乎无法按正确的顺序排列数据 在处理过程中顺序似乎丢失了 这意味着镶木地板元数据不正确 具体来说 我想确保镶木地板行组反映排序顺序
  • 将回归结果输出到 R 中的数据帧中

    我想知道是否有任何命令可以将 lm 模型的结果输出到 R 中的数据帧中 就像 SAS 中的 outest 一样 有任何想法吗 我正在运行多个模型 我希望结果如下所示 Model alpha Beta Rsquared F df model0
  • 为什么 BigQuery 加载作业统计信息会返回查询信息?

    我们有一些加载作业 可以从 GCS 中获取文件 并将它们加载到 BigQuery 中进行分析 我们使用JobConfigurationLoad class https developers google com resources api
  • Android:将sqlite数据库内容加载到webview

    我有一个sqlite我有一个要加载的内容的数据库webview 如我所愿从数据库中选择并在网页视图中显示 有什么办法可以做到吗 public class TataworatYawmeeh extends Activity WebView w
  • 共享内存与 Go 通道通信

    Go 的口号之一是不要通过共享内存进行通信 相反 通过通信来共享内存 http golang org doc effective go html concurrency 我想知道 Go 是否允许在同一台机器上运行的两个不同的 Go 编译的二
  • Jupyter python3笔记本无法识别pandas

    我正在使用 Jupyter 笔记本并选择了 Python 3 在单元格的第一行我输入 import pandas as pd 我从笔记本中得到的错误是 ImportError 没有名为 pandas 的模块 如何将pandas安装到jupy
  • 使用 matplotlib 设置网络中的动态节点形状

    第一次在这里发帖 请大家多多包涵 我正在尝试在 Networkx 中绘制不同类型的字符网络 并希望为每种类型设置不同的节点形状 例如 我希望角色是圆形 生物是三角形等 我已经尝试了几个小时来解决这个问题并进行了广泛的搜索 但我还没有找到一种
  • 如何验证自签名认证

    我会清楚地向您提供我的问题 以便您可以回答我 我有一个使用 SslStream 保护的客户端 服务器 套接字 连接 据我所知 使用 ssl 确保我的客户端只会连接到我的服务器 为此 我必须向客户端添加一个函数来验证服务器认证并确保服务器是真
  • ClassNotFoundException,在运行 Hadoop 示例作业时

    我已经开始做一些关于 hadoop 的事情了 它已设置并正常运行 现在我正在做一个单节点 独立集群 我正在尝试运行示例作业 如上面提到的http hadoop apache org common docs r0 18 3 mapred tu
  • 干预图片圆角上传

    我正在尝试将文件上传为圆圈 但无法使其工作 我看过一些有关对图像应用蒙版的主题 但是当我应用蒙版时 它需要很长时间并且服务器会关闭请求 我正在使用Intervention ImageLaravel 的库 我的代码如下 identifier
  • ANR keyDispatchingTimedOut 错误

    当我尝试使用 DOM 解析 RSS 时 我在我的应用程序中遇到了强制向下错误 但是 这并不总是强制向下问题 这是 logcat ANR keyDispatchingTimedOut DALVIK THREADS main prio 5 ti
  • iOS 中接收到 APNS 时打开视图控制器

    嘿 我是 iPhone 新手 我一直在尝试使用 Apple 推送通知 基本上 我想要做的是 当用户单击收到的推送通知消息时 我需要打开一个特定的视图控制器 我已将带有关键参数 type 的自定义数据添加到我的负载 JSON 中 因此代表通知
  • Dagger2 继承的子组件多重绑定

    希望经过日复一日的研究这个非常感兴趣的主题 继承的子组件 后在这里找到一些帮助multibindings你可以在这里找到继承的子组件多重绑定 https dagger dev multibindings这是该页面的最后一个主题 根据官方文档
  • Windows通用应用程序无需网络即可连续听写

    按照此处提供的示例 https github com Microsoft Windows universal samples https github com Microsoft Windows universal samples很好地概述
  • 使用钢筋时的常见测试覆盖报告

    我有一个使用 Rebar 的 Erlang 应用程序 并且有使用 Common Test 编写的测试 我想查看这些测试的测试覆盖率报告 因此我在我的rebar config file cover enabled true 然而 通用测试报告
  • 如何为 pytorch 图层指定名称?

    下列的上一个问题 https stackoverflow com questions 66137298 how to detect source of under fitting and vanishing gradients in pyt
  • 向 SQL Server 插入数据不起作用,但没有错误消息显示

    我正在使用 asp net 4 5 和 SQL Server 2008 Express 我想将表单的数据插入到我的数据库中 连接字符串正常并且可以在另一个页面中工作 但在此页面中 插入按钮似乎只是刷新页面并且没有发生插入 代码 protec
  • 什么准则适合确定何时将类成员实现为属性还是方法?

    The 已开始出现在 赞助者 区域中的信息似乎表明该属性仅适用于逻辑数据成员 请参阅文档的第 34 35 页 在以下情况下 方法被认为是适当的 该操作是一个转换 例如Object ToString 该操作的成本足够高 您希望告知用户他们应该