簡體   English   中英

在C#中,進行構造函數鏈接的最佳/可接受方式是什么?

[英]In C#, what is the best/accepted way of doing constructor chaining?

鑒於以下課程:

public class MyClass
{
    private string _param;

    public MyClass ()
    {
        _param = string.Empty;
    }

    public MyClass (string param)
    {
        _param = param;
    }
}

我在兩種鏈接這些構造函數的方法之間分裂:

第一個

public MyClass () : this (string.Empty)
{
}

public MyClass (string param)
{
    _param = param;
}

第二個:

public MyClass ()
{
    _param = string.Empty;
}

public MyClass (string param) : this ()
{
    _param = param;
}

那么,從無參數構造函數鏈接到其他方式更好嗎?

舉個例子,我會先走第一條路。 第二個實際上並沒有消除您可能試圖避免的任何代碼重復,因為您仍然必須明確設置_param 第二種方法中的空this()調用完全是無償的。

我更喜歡第一個。 構造函數的行為將始終保持連貫性和可預測性,此外還可減少代碼重復。

從pramater鏈接到pramater,

所以從lessor param構造函數調用默認值為更多參數

public MyClass()
{
    MyClass(default value here);
}

public Myclass(value)
{
    _value = value;
}

我想從鏈接從小到大總是更好,即為什么在構造函數中分配一個空字符串然后給定一個字符串,當更有意義的是將默認值(string.Empty)傳遞給參數化構造函數。

我也更喜歡第一個。 就像在從簡單基類繼承的復雜派生類一樣,您希望“復雜”構造函數基於“基本”構造函數的功能。

你的情況下的第二個例子確實沒有意義,因為你復制了類成員的賦值(如果你使用MyClass (string param)構造函數)。

如果鏈式構造函數是“添加功能”,則第二種方法更有用。

例:

public MyClass ()
{
    _param0 = string.Empty;
}

public MyClass (string param1) : this ()
{
    _param1 = param1;
}

public MyClass (string param1, string param2) : this (param1)
{
    _param2 = param2;
}

在您的特定情況下,第一個示例顯然更合適,因為您只有一個分配給同一個成員。

如果你在這里說明你的目標是“在沒有指定值時提供默認值”,那么你應該清楚地使用第一種方法。

一般規則是:從最不具體的構造函數鏈到最具體的構造函數。

暫無
暫無

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

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