什么是省略的实例名称?

时间:2015-10-19 15:13:30

标签: c#

我对此问题有一个问题"快捷方式"在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模板中众所周知的源代码。

4 个答案:

答案 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;
}