簡體   English   中英

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. 我之所以大發雷霆,是因為您想知道自己是否有名字。 一旦提供了虛假名稱,就很難確定。 您可以向名為“不適用”的客戶發送數百封信。

就語義而言,兩種方法都是正確的。 兩者之間的一些區別是

第一種方式:將構造函數調用為:

  1. new Customer(firstName="first");
  2. new Customer(lastName="last");
  3. new Customer("first", "last");
  4. new Customer();

第二種方式:將構造函數調用為:

  1. new Customer("first", "last");
  2. new Customer();

因此,第一種方法將為您提供更多的調用構造函數的靈活性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM