c# - 这是避免不断创建对象的好习惯吗?

标签 c# .net performance operators operator-overloading

早上好

假设我有一个类 ClassA,一个运算符 + 将两个 ClassA 类型的对象相加,一个来自 的隐式转换intClassA,并且我想重载运算符 ++...假设 + 的代码相当长,但是 ClassA1 的总和是一个非常特殊的情况,哪个选项更好?

  1. 使用 + 和已定义的隐式转换实现 ++
  2. 重复部分代码,只需添加 1 即可简化很多代码。

我的想法是 (2) 更好,因为它通过隐式转换保存了新 ClassA 对象的创建,这在 ++ 时非常有用例如,在 for 循环中使用运算符。此外,速度是必须的。

非常感谢。

最佳答案

您已经回答了自己的问题。如果速度是必须的,那么选择第二个更快的选项(最好对其进行基准测试以确保它确实快得多)。

否则,请选择第一个选项,因为代码越少越好(并且保持 DRY 是双重的)。更少的代码意味着更少的潜在错误、更少的维护、更少的编写和更少的阅读。如果代码在很大程度上重复了另一部分代码,那么您必须在进行更改时使两者保持同步——这会带来麻烦,因为很容易忘记更新一个代码(即使您总是记得进行更新)对两个地方的更改,因为它们并不完全相同,所以有可能正确更新一个部分而错误地更新另一个部分)。

在做出最终决定之前,确保速度确实是必须的——你不想要 premature optimization .

关于c# - 这是避免不断创建对象的好习惯吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5281169/

相关文章:

c# - 如何通过不带资源文件的 cmake 为 C# Windows 窗体应用程序设置图标?

c# - SL3 透明/玻璃子窗口?

asp.net - 如何部署完全信任的 IIS ASP .NET 应用程序?

mysql - 提高查询速度建议

c++ - 将十亿整数初始化为值 1

c# - Entity Framework 探查器 - ASP.NET MVC4 与 EF 6 - 无法确定提供者名称

c# - 仅在 Azure 计算模拟器中出现 EdmMetadata 错误

c# - 缺少 Microsoft 时区

php - RijndaelManaged.CreateEncryptor key 扩展

sql-server - 哪些因素会导致 SQL Server 上的存储过程重新编译?