如何解决类方法返回`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 = "{}-{}-{}-{}"
有什么理由我不应该这样做吗?我想不出任何,但感觉有点 hacky,我没见过它在其他地方做过。
解决方法
没有。这是 fluent interfaces 的常见模式。
,这很好。我还可以建议:
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、流畅的界面)。 另一方面,调试很困难,有时甚至不可能。中间结果是无法达到的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。