被省略的实例名是什么?

本文关键字:是什么 实例 | 更新日期: 2023-09-27 18:18:32

我有一个关于这个在ASP. js中发现的"快捷方式"的问题。. 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/tor时才有可能?有人能告诉我c#语言定义的那一部分吗?

我用谷歌搜索过这个问题,但是找不到答案。

编辑:这个问题显然是非常类似于其他方法链问题,如果你已经知道这个术语,但我的问题不是为了实现,只有正确使用它,并得到正确的文档。也许这个问题是很好的谷歌,因为我使用了众所周知的源代码从VS模板。

被省略的实例名是什么?

我听说这个概念被称为"方法链"或"流畅语法"(取决于方法的语义)。你可以在jQuery中看到很多。其思想很简单,对象上的方法将修改该对象并返回修改后的版本。因此,可以根据返回值立即调用另一个方法,以此类推。

代码没有"省略"builder变量。只是new ConfigurationBuilder(appEnv.ApplicationBasePath)返回一个ConfigurationBuilder对象。当你在ConfigurationBuilder上调用.AddJsonFile()时,它会修改对象,然后再次返回它。所以你可以把任意多的调用链接到那个对象,并且仍然以这个对象结束。

从技术上讲,第一个例子都是一行代码。回车是为了可读性。(注意,在结尾之前没有分号。)c#只是忽略空格,继续处理代码,直到到达语句的末尾(分号)。与此形成对比的是,在VB等语言中,回车符是语言的一部分,它本身终止了语句。

这叫做方法链接。

原则是返回对this的引用,这样可以直接调用同一对象上的另一个方法。

这可以在每个不返回值的方法上完成,但主要用于"setup"或"configuration"函数,如您的示例。

看这里:你可以看到支持方法链(在一个语句中一个接一个地调用方法)的类的样子

Fluent接口-方法链接

"你所需要做的就是创建一个对象,它的方法总是返回对象本身。"然后,您可以将这些方法"链接"起来(提供的链接中有完整的示例)

您可以很容易地自己实现这一点,只需返回this

IBuilder AddJsonFile(string path) {
 // some code
 return this;
}