【问题标题】:Standard term for instantiation practice实例化实践的标准术语
【发布时间】:2017-03-24 16:49:05
【问题描述】:

对于实例化类而不使用显式构造函数而是初始化其某些属性的做法是否有标准术语?

new SomeClass { PropertyA = true, PropertyB = "ugly code is ugly" };

我猜可能会有一个标准的非判断性术语,然后可能是一个否定术语。

** --- ** --- 编辑后澄清评论和答案 --- *** ---

对象初始化就是这样。

阅读 cmets 后,我明白对象初始化本身并不是一个坏习惯;问题是缺少定义良好的构造函数来支持跨解决方案的对象初始化,这使得解决方案更难维护和理解。

对象初始化使用不当的例子:

  • Student有10个属性,包括CodeProgram
  • 代码正在从 10 多个不同的点实例化此类。
  • 每次,CodeProgram 都是通过对象初始化来定义的。

在这种情况下,Student 类应该有一个构造函数强制 CodeProgram 在实例化时传递。

【问题讨论】:

  • 这是一个对象初始化器。这就是所谓的,无论好坏。这确实使用了构造函数:在这种情况下是默认构造函数。然后它分配一些属性。就像你为它写更多代码一样。我从未听说过有人对此进行评判,但毫无疑问有人找到了理由。
  • 我想作者的意思是做 new SomeClass(true, "ugly code is丑陋") 和所显示的内容之间的区别。
  • 我们不知道是否有这样的构造函数可以这样处理它。
  • 我更新了问题,澄清了我所指的消极方面。问题没有正确提出,因此我得到了反对票。无论如何,这有助于我指出我现在在工作中重构旧代码时所面临的不良做法。

标签: c# instantiation terminology


【解决方案1】:

这是一个对象初始化器。

我不确定您所说的“负面术语”是什么意思。实例化一个对象并一次性设置它的一些属性并没有错。它比替代品更好

var someClass = new SomeClass();
someClass.PropertyA = true;
someClass.PropertyB = "Clean code is clean";

【讨论】:

  • 你说得对,但我接受了另一个,因为它以前进来过。关于否定词的事情,我用 cmets 更新了这个问题。感谢您的快速回答:)
【解决方案2】:

【讨论】:

    【解决方案3】:

    我相信它被称为“Initializer Syntax

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-15
      • 1970-01-01
      • 1970-01-01
      • 2017-02-16
      • 1970-01-01
      相关资源
      最近更新 更多