cat*_*lin 2 c# parameters constructor default
所以我需要了解哪种方式是正确/最好的方式?
class Customer
{
string firstName;
string lastName;
public Customer(string firstName="non", string lastName="applicable")
{
this.firstName = firstName;
this.lastName = lastName;
}
}
Run Code Online (Sandbox Code Playgroud)
class Customer
{
string firstName;
string lastName;
public Customer()
: this("non","applicable")
{ }
public Customer(string firstName, string lastName)
{
this.firstName = firstName;
this.lastName = lastName;
}
}
Run Code Online (Sandbox Code Playgroud)
如果我正在创建一个方法 printFullName(),它在两种情况下都适用。那么选择哪一个呢?第一个对我来说似乎更容易。
从语义上来说,两种方式都是正确的。两者之间的一些区别是
第一种方式: 调用构造函数:
new Customer(firstName="first");new Customer(lastName="last");new Customer("first", "last");new Customer();第二种方式: 调用构造函数:
new Customer("first", "last");new Customer();因此,第一种方法将为您提供更多调用构造函数的灵活性。
第二种方法更好,因为如果“non”和“applicable”不提供输入,您似乎打算使用它们作为名字和姓氏。
如果您只有一个带有可选参数的构造函数,那么有人可以提供一个名字,并将姓氏设为“适用”,例如“Bob 适用”。
这是一个微小的区别,因为 a) 它以任何一种方式工作,并且 b) 消费者可以知道默认参数是什么。但是第二个选项似乎更符合您的明显意图。
要特别特别,我会重新考虑这些默认值。有人应该能够创建一个没有名字的客户吗?如果是这样,那么名称可能应该为空。也许CustomerName应该是一个单独的类,并且Customer有一个Name类型CustomerName.的属性我之所以对这个问题不屑一顾,是因为你想知道你是否有名字。一旦你提供了一个更难确定的假名。您可以向名为“不适用”的客户发送数百封信函。
| 归档时间: |
|
| 查看次数: |
7661 次 |
| 最近记录: |