为什么 StringBuilder Append 方法 return 一个 StringBuilder 对象?
Why do the StringBuilder Append methods return a StringBuilder object?
因此,如果您查看 'StringBuilder' 的任何 Append 方法,return 类型是 StringBuilder
。不是字符串或行数或任何您可能认为甚至直观有用的东西。表面上(我还没有检查过),它是您刚刚调用方法的同一个 StringBuilder
对象。
我实在找不到原因。有吗?
这是所谓的“流畅界面”或“流畅 API”的简单形式。 (参见 This wikipedia article)API 遵循该模式允许链接方法,这在开始时可能看起来很奇怪,但可能使代码易于阅读。另一个著名的 API 实现它的是 linq
,你可以在其中编写类似
的东西
myList.Where(x => x.Element1 > 1).OrderBy(x => x.Element2).Select(x => x.Element3);
或者,作为一个非常复杂的流利示例 API,来自 Nuke build 的任务描述:
Target CompileForMatlab => _ => _
.Executes(() =>
{
MSBuild(s => s
.SetSolutionFile(Solution)
.SetConfiguration(Configuration)
.AddTargets("Restore,Build,Publish")
.SetProjectFile(Solution.GetProject("ExtendedLogParser"))
.SetOutDir(ArtifactsDirectory / "ExtendedLogParser")
.SetProperty("Platform", Platform)
.AddProperty("SelfContained", true)
.AddProperty("RuntimeIdentifier", "win10-x64")
.AddProperty("PublishDir", "../ExtendedLogParser")
.DisableNodeReuse());
});
因此,如果您查看 'StringBuilder' 的任何 Append 方法,return 类型是 StringBuilder
。不是字符串或行数或任何您可能认为甚至直观有用的东西。表面上(我还没有检查过),它是您刚刚调用方法的同一个 StringBuilder
对象。
我实在找不到原因。有吗?
这是所谓的“流畅界面”或“流畅 API”的简单形式。 (参见 This wikipedia article)API 遵循该模式允许链接方法,这在开始时可能看起来很奇怪,但可能使代码易于阅读。另一个著名的 API 实现它的是 linq
,你可以在其中编写类似
myList.Where(x => x.Element1 > 1).OrderBy(x => x.Element2).Select(x => x.Element3);
或者,作为一个非常复杂的流利示例 API,来自 Nuke build 的任务描述:
Target CompileForMatlab => _ => _
.Executes(() =>
{
MSBuild(s => s
.SetSolutionFile(Solution)
.SetConfiguration(Configuration)
.AddTargets("Restore,Build,Publish")
.SetProjectFile(Solution.GetProject("ExtendedLogParser"))
.SetOutDir(ArtifactsDirectory / "ExtendedLogParser")
.SetProperty("Platform", Platform)
.AddProperty("SelfContained", true)
.AddProperty("RuntimeIdentifier", "win10-x64")
.AddProperty("PublishDir", "../ExtendedLogParser")
.DisableNodeReuse());
});