簡體   English   中英

class 方法返回“this”是不好的做法嗎?

[英]Is it bad practice for a class method to return `this`?

public class Chain
{
    public string ChainString;

    public Chain() 
    {
        ChainString = "{}"; 
    }

    public Chain AddLink()
    {
        ChainString += "-{}";
        return this; // is this a bad idea?
    }
}

在上面的示例中, AddLink方法返回this 我想這樣做的原因是為了更易讀的實例化,如下所示。

// more verbose (here, `AddLink` returns void)
Chain myChain = new Chain();
myChain.AddLink();
myChain.AddLink();
myChain.AddLink();
// myChain.ChainString = "{}-{}-{}-{}"
// nicer
Chain myChain = new Chain()
    .AddLink()
    .AddLink()
    .AddLink();
// myChain.ChainString = "{}-{}-{}-{}"

有什么理由我不應該這樣做嗎? 我想不出任何東西,但感覺有點老套,而且我還沒有在其他地方看到過。

不,這是流暢界面的常見模式。

這可以。 我還可以建議:

public Chain AddLink(int links = 1)
{
    if (links <= 0) return this;

    string link = "-{}";
    var buf = new StringBuilder(ChainString, ChainString.Length + (links * link.Length));
    for(int i=0; i<links; i++)
    {
        buf.Append(link);
    }

    ChainString = buf.ToString();
    return this; 
}

如上所述,這是一種非常常見的設計模式,旨在使代碼更具可讀性。 您可能會發現用於描述此類代碼的幾個術語(流暢編碼、流暢風格、流暢 api、流暢界面)。 另一方面,調試起來很困難,有時甚至是不可能的。 中間結果是無法實現的。

暫無
暫無

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

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