重载构造函数与对象初始化[英] Overloaded constructors vs. Object initializations

问题描述

你好,

我想对重载构造函数与对象的一些想法
初始化.假设该类支持默认构造函数,是
当您能够使用时,有任何理由包含重载的构造函数
对象初始化?我看到了一点,提供重载,如果你是
开发可能支持在 2.x 之上运行的框架代码
但是如果你正在编写一个密封的应用程序/知道你只会去
在 3.x 或更高版本上部署,那么对我来说似乎并不那么明显.
..Andreas

推荐答案

8 月 14 日下午 3:48*,Andreas <Andr...@discussions.microsoft.com 写道:
你好,

我想对重载构造函数与对象的一些想法
初始化.假设该类支持默认构造函数,是
当您能够使用时,有任何理由包含重载的构造函数
对象初始化?
是的,当您的对象是不可变的 - 那么您的所有属性都将是
只读,并且不能使用对象初始化器.甚至对于
可变对象,可以有属性应该只有
对象创建时初始化一次,不改变
之后 - 例如Dictionary<,>.Comparer


我想对重载构造函数与对象的一些想法
初始化.假设该类支持默认构造函数,是
当您能够使用时,有任何理由包含重载的构造函数
对象初始化?

是的,当您的对象是不可变的 - 那么您的所有属性都将是
只读,并且不能使用对象初始化器.甚至对于
可变对象,可以有属性应该只有
对象创建时初始化一次,不改变
之后 - 例如字典<,>.Comparer
是的,你是对的.也许我应该说得更准确一点
"除非你设计时明确要求使用非默认
构造函数".多次使用重载的构造函数来制作
对象初始化更人性化并提供更简洁的代码,
比如

公共类人
{
公共人()
{ }

public Person(string firstName, string lastName) : this(0, firstName,
姓氏)
{ }

public Person(int age, string firstName, string lastName)
{
......
}
}

8 月 14 日下午 5:03*,Andreas <Andr...@discussions.microsoft.com 写道:
是的,你是对的.也许我应该说得更准确一点
"除非你设计时明确要求使用非默认
构造函数".多次使用重载的构造函数来制作
对象初始化更加用户友好并提供更简洁的代码
在这种情况下,对象初始值设定项显然更胜一筹(更多
也可读,因为属性名称是拼写出来的).此外,与
大量的属性,你不能涵盖所有的排列
无论如何(我经常在 BCL 中看到这种半心半意的尝试,你在哪里
例如,需要属性#1+#3+#4 的组合,但你只能得到构造函数
对于#1+#2+#3 或#1+#2+#4).

本文地址:https://www.itbaoku.cn/post/1050774.html