Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 省略了什么样的实例名?_C# - Fatal编程技术网

C# 省略了什么样的实例名?

C# 省略了什么样的实例名?,c#,C#,我对ASP.NET 5模板中的“快捷方式”有疑问: public Startup(IHostingEnvironment env, IApplicationEnvironment appEnv) { var builder = new ConfigurationBuilder(appEnv.ApplicationBasePath) .AddJsonFile("config.json") .AddJsonF

我对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语言定义的那一部分吗

我在谷歌上搜索过这个,但找不到答案

编辑:如果您已经知道这个术语,那么这个问题显然与其他方法链接问题非常相似,但我的问题并不是要实现这一点,只是为了正确使用它并获得正确的文档。可能这个问题很适合谷歌搜索,因为我使用了VS模板中的著名源代码。

这就是所谓的

其原理是返回对
this
的引用,以便可以直接调用同一对象上的另一个方法


这可以在每个不返回值的方法上完成,但主要用于“设置”或“配置”函数,如您的示例中所示。

看看这里:您可以看到支持方法链接的类的外观(在一条语句中依次调用方法)

“您只需创建一个对象,其方法始终返回对象本身。”
之后,您可以“链接”这些方法(提供链接中的完整示例)

您只需返回
this

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

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

代码没有“省略”
builder
变量。只是
newconfigurationbuilder(appEnv.ApplicationBasePath)
返回一个
ConfigurationBuilder
对象。当您在
ConfigurationBuilder
上调用
.AddJsonFile()
时,它会修改对象,然后再次返回。因此,您可以根据自己的喜好将任意多个调用链接到该对象,并且仍然以该对象结束


从技术上讲,第一个示例都是一行代码。回车是为了便于阅读。(请注意,在结束之前没有分号。)C#只会忽略空格并继续处理代码,直到到达语句的结尾(分号)。与VB这样的语言相比,VB中的回车是语言的一部分,并且本身终止语句。

两个代码示例实际上是相同的。。。谷歌搜索:c#chainingWOW!!感谢所有的回答如此之快,完全符合我的问题。我需要挖掘一些链接,因为我是一个新手。不知道哪一个答案最好?请投赞成票!谢谢!这似乎是一个类似于C#隐式完成的模式,并且在LINQ中使用了很多?为什么即使在MSDN站点中使用正确的术语作为参考,也几乎什么也找不到?仅通过使用LINQ间接地有一些。大多数解释都是第三方的。@FalcoAlexander:这并不是真正的“隐式”完成的。虽然你是对的,LINQ也大量使用了这个概念。在它的核心,它只不过是一个返回它所操作的对象的方法。在LINQ中,它是通过静态扩展方法完成的,该方法返回
this
参数,但是实例方法可以通过返回
this
本身来完成同样的事情。