c#constructor默认参数正确方式

时间:2018-01-11 11:16:15

标签: c# parameters constructor default

所以我需要了解哪种方式是正确/最好的?

第一种方式:

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(),它在两种情况下都有效。那么选择哪一个?第一个对我来说似乎更容易。

2 个答案:

答案 0 :(得分:3)

第二种方式更好,因为看起来你打算使用"非"和"适用"如果它们没有提供任何输入,则作为名字和姓氏。

如果你只有一个带有可选参数的构造函数,有人可以提供名字,姓氏为#34;适用,"喜欢" Bob适用。"

这是一个微小的差异,因为a)它以任何一种方式工作,并且b)消费者可以告诉默认参数是什么。但第二种选择似乎更符合你的明显意图。

非常特别我会重新考虑这些默认值。有人能够创建一个没有名字的客户吗?如果是这样,那么名称可能为null。也许CustomerName应该是一个单独的类,并且Customer具有类型为Name的{​​{1}}属性我之所以分裂头发是因为你想要知道你是否有名字。一旦你提供了一个更难确定的假名。您可以向名为"不适用的客户发送数百封信。"

答案 1 :(得分:1)

在语义方面,两种方式都是正确的。两者之间的一些差异是

第一种方式: 将构造函数调用为:

  1. new Customer(firstName="first");
  2. new Customer(lastName="last");
  3. new Customer("first", "last");
  4. new Customer();
  5. 第二种方式: 将构造函数调用为:

    1. new Customer("first", "last");
    2. new Customer();
    3. 因此,第一种方法可以让您更灵活地调用构造函数。