所以我需要了解哪种方式是正确/最好的?
class Customer
{
string firstName;
string lastName;
public Customer(string firstName="non", string lastName="applicable")
{
this.firstName = firstName;
this.lastName = lastName;
}
}
class Customer
{
string firstName;
string lastName;
public Customer()
: this("non","applicable")
{ }
public Customer(string firstName, string lastName)
{
this.firstName = firstName;
this.lastName = lastName;
}
}
如果我正在创建一个方法printFullName(),它在两种情况下都有效。那么选择哪一个?第一个对我来说似乎更容易。
答案 0 :(得分:3)
第二种方式更好,因为看起来你打算使用"非"和"适用"如果它们没有提供任何输入,则作为名字和姓氏。
如果你只有一个带有可选参数的构造函数,有人可以提供名字,姓氏为#34;适用,"喜欢" Bob适用。"
这是一个微小的差异,因为a)它以任何一种方式工作,并且b)消费者可以告诉默认参数是什么。但第二种选择似乎更符合你的明显意图。
非常特别我会重新考虑这些默认值。有人能够创建一个没有名字的客户吗?如果是这样,那么名称可能为null。也许CustomerName
应该是一个单独的类,并且Customer
具有类型为Name
的{{1}}属性我之所以分裂头发是因为你想要知道你是否有名字。一旦你提供了一个更难确定的假名。您可以向名为"不适用的客户发送数百封信。"
答案 1 :(得分:1)
在语义方面,两种方式都是正确的。两者之间的一些差异是
第一种方式: 将构造函数调用为:
new Customer(firstName="first");
new Customer(lastName="last");
new Customer("first", "last");
new Customer();
第二种方式: 将构造函数调用为:
new Customer("first", "last");
new Customer();
因此,第一种方法可以让您更灵活地调用构造函数。