[英]What is the correct way to define a constant value in a derived class used to validate parameters in a parent constructor in C#
[英]c# constructor default parameters correct way
因此,我需要了解哪種方法是正確的/最好的方法?
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(),則在兩種情況下均可以使用。 那么選擇哪一個呢? 第一個對我來說似乎更容易。
第二種方法更好,因為如果您不提供任何輸入,則看起來您打算使用“ non”和“ applicable”作為名字和姓氏。
如果您只有一個帶有可選參數的構造函數,則有人可以提供名字,並且使姓氏為“ applyable”,例如“ Bob apply”。
這是一個很小的差異,因為a)兩種方式都能起作用,並且b)消費者可以知道默認參數是什么。 但是第二種選擇似乎更符合您的意圖。
確切地說,我會重新考慮這些默認值。 有人可以創建沒有名字的客戶嗎? 如果是這樣,那么名稱應該為空。 也許CustomerName
應該是一個單獨的類,並且Customer
具有類型為CustomerName.
的Name
屬性CustomerName.
我之所以大發雷霆,是因為您想知道自己是否有名字。 一旦提供了虛假名稱,就很難確定。 您可以向名為“不適用”的客戶發送數百封信。
就語義而言,兩種方法都是正確的。 兩者之間的一些區別是
第一種方式:將構造函數調用為:
new Customer(firstName="first");
new Customer(lastName="last");
new Customer("first", "last");
new Customer();
第二種方式:將構造函數調用為:
new Customer("first", "last");
new Customer();
因此,第一種方法將為您提供更多的調用構造函數的靈活性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.