我对此问题有一个问题"快捷方式"在ASP.NET 5模板中找到:
public Startup(IHostingEnvironment env, IApplicationEnvironment appEnv)
{
var builder = new ConfigurationBuilder(appEnv.ApplicationBasePath)
.AddJsonFile("config.json")
.AddJsonFile($"config.{env.EnvironmentName}.json", optional: true);
最后两行只是方法调用,显然是构建器。 我认为这是100%相同:
var builder = new ConfigurationBuilder(appEnv.ApplicationBasePath);
builder.AddJsonFile("config.json");
builder.AddJsonFile($"config.{env.EnvironmentName}.json", optional: true);
在省略对象名称的情况下,您将这种语法称为什么?只有在调用NEW / ctor时才有可能吗?有人能指出我对C#语言定义的那一部分吗?
我用Google搜索了这个,但找不到答案。
编辑:这个问题显然与其他方法链接问题非常相似,如果您已经知道该术语,但我的问题并非意图实现,只是正确使用它并获得正确的文档。可能这个问题很适合谷歌搜索,因为我使用VS模板中众所周知的源代码。
答案 0 :(得分:4)
我听说这个概念被称为“方法链接”或“流利语法”(取决于方法的语义)。例如,你在jQuery这样的东西中看到了很多。这个想法很简单,对象上的方法将修改该对象并返回修改后的版本。因此可以立即在返回值上调用另一种方法,依此类推。
代码不是“省略”builder
变量。只是new ConfigurationBuilder(appEnv.ApplicationBasePath)
返回ConfigurationBuilder
个对象。当您在.AddJsonFile()
上调用ConfigurationBuilder
时,它会修改对象,然后再次返回。因此,您可以根据需要链接任意数量的调用,并最终得到该对象。
从技术上讲,第一个例子是一行代码。回车是为了便于阅读。 (注意到结尾之前没有分号。)C#只是忽略空格并继续处理代码,直到到达语句结尾(分号)。将此与VB之类的语言进行对比,其中回车是语言的一部分,并且本身终止语句。
答案 1 :(得分:1)
这称为Method Chaining。
原则是您返回对this
的引用,以便可以直接调用同一对象上的另一个方法。
这可以在每个不返回值的方法上完成,但主要用于" setup"或"配置"功能,就像你的例子一样。
答案 2 :(得分:1)
看看这里:你可以看到一个类看起来如何支持方法链接(在一个语句中相互调用方法)
Fluent Interfaces - Method Chaining
"您需要做的就是创建一个对象,其方法始终返回对象本身。" 之后你可以"链" mathods(提供的链接中的完整示例)
答案 3 :(得分:1)
只需返回this
IBuilder AddJsonFile(string path) {
// some code
return this;
}