C# 使用大括号,但不定义函数、结构等

C# 使用大括号,但不定义函数、结构等,c#,orchardcms,braces,C#,Orchardcms,Braces,在分析Orchard.cms源代码时,我发现了有趣的代码,C#中的括号不用于定义任何内部对象。 似乎它是为某些上下文使用而制作的。你能澄清一下用这样的括号的目的是什么吗 下面是它的代码示例: builder.RegisterType<DefaultOrchardHost>().As<IOrchardHost>().As<IEventHandler>().SingleInstance(); { builder.RegisterType<She

在分析Orchard.cms源代码时,我发现了有趣的代码,C#中的括号不用于定义任何内部对象。 似乎它是为某些上下文使用而制作的。你能澄清一下用这样的括号的目的是什么吗

下面是它的代码示例:

 builder.RegisterType<DefaultOrchardHost>().As<IOrchardHost>().As<IEventHandler>().SingleInstance();
 {
     builder.RegisterType<ShellSettingsManager>().As<IShellSettingsManager>().SingleInstance();

     builder.RegisterType<ShellContextFactory>().As<IShellContextFactory>().SingleInstance();
     {
         builder.RegisterType<ShellDescriptorCache>().As<IShellDescriptorCache>().SingleInstance();

         builder.RegisterType<CompositionStrategy>().As<ICompositionStrategy>().SingleInstance();
         {
             builder.RegisterType<ShellContainerRegistrations>().As<IShellContainerRegistrations>().SingleInstance();
             builder.RegisterType<ExtensionLoaderCoordinator>().As<IExtensionLoaderCoordinator>().SingleInstance();
             builder.RegisterType<ExtensionMonitoringCoordinator>().As<IExtensionMonitoringCoordinator>().SingleInstance();
             builder.RegisterType<ExtensionManager>().As<IExtensionManager>().SingleInstance();
             {
                 builder.RegisterType<ExtensionHarvester>().As<IExtensionHarvester>().SingleInstance();
                 builder.RegisterType<ModuleFolders>().As<IExtensionFolders>().SingleInstance()
                     .WithParameter(new NamedParameter("paths", new[] { "~/Modules" }));
                 builder.RegisterType<CoreModuleFolders>().As<IExtensionFolders>().SingleInstance()
                     .WithParameter(new NamedParameter("paths", new[] { "~/Core" }));
                 builder.RegisterType<ThemeFolders>().As<IExtensionFolders>().SingleInstance()
                     .WithParameter(new NamedParameter("paths", new[] { "~/Themes" }));

                 builder.RegisterType<CoreExtensionLoader>().As<IExtensionLoader>().SingleInstance();
                 builder.RegisterType<ReferencedExtensionLoader>().As<IExtensionLoader>().SingleInstance();
                 builder.RegisterType<PrecompiledExtensionLoader>().As<IExtensionLoader>().SingleInstance();
                 builder.RegisterType<DynamicExtensionLoader>().As<IExtensionLoader>().SingleInstance();
                 builder.RegisterType<RawThemeExtensionLoader>().As<IExtensionLoader>().SingleInstance();
             }
         }

         builder.RegisterType<ShellContainerFactory>().As<IShellContainerFactory>().SingleInstance();
     }

     builder.RegisterType<DefaultProcessingEngine>().As<IProcessingEngine>().SingleInstance();
 }
builder.RegisterType().As().As().SingleInstance();
{
builder.RegisterType().As().SingleInstance();
builder.RegisterType().As().SingleInstance();
{
builder.RegisterType().As().SingleInstance();
builder.RegisterType().As().SingleInstance();
{
builder.RegisterType().As().SingleInstance();
builder.RegisterType().As().SingleInstance();
builder.RegisterType().As().SingleInstance();
builder.RegisterType().As().SingleInstance();
{
builder.RegisterType().As().SingleInstance();
builder.RegisterType().As().SingleInstance()
.WithParameter(新名称参数(“路径”,新[]{“~/Modules”}));
builder.RegisterType().As().SingleInstance()
.WithParameter(新名称参数(“路径”,新[]{“~/Core”}));
builder.RegisterType().As().SingleInstance()
.WithParameter(新名称参数(“路径”,新[]{“~/Themes”}));
builder.RegisterType().As().SingleInstance();
builder.RegisterType().As().SingleInstance();
builder.RegisterType().As().SingleInstance();
builder.RegisterType().As().SingleInstance();
builder.RegisterType().As().SingleInstance();
}
}
builder.RegisterType().As().SingleInstance();
}
builder.RegisterType().As().SingleInstance();
}
你能澄清一下用这样的括号的目的是什么吗

它们只是块。它们形成一个范围,如:

Method1(1);

{
   int i = 1;  // i is local to this {} block
   Method1(i++);
}
// Here i does not exist any more
请注意,该块与前面的语句没有任何关系,示例中缺少空行可能会产生误导


但是在发布的代码中,没有声明变量。所以它们是完全多余的。我猜它们是一些代码预处理留下的。

本例的目标只是让开发人员/人员在阅读代码时更容易理解类型之间的层次关系,以便更容易理解代码


(在大多数IDE(如VisualStudio)中,使用像这样的大括号将使行缩进)

在本例中,这只是一个组织问题。大括号创建了一个作用域,因此括号内声明的任何变量都是该代码块的局部变量。所以这是他们的正常目的


也就是说,在你给出的例子中,它们中没有任何声明。在本例中,Orchard人员只是将其作为一种组织方法,以使代码更易于理解。我猜,如果你看一下你给出的例子中的类,你会发现它们以一种分层的方式相互关联,类似于它们用大括号分组的方式。

已经编辑过了。我认为@lightbrick有这个想法。在本例中,它们完全是装饰性的。起初,我以为它们用于某些上下文,但后来理解,使用Autofac的builder已经可以管理在此括号内创建的对象的生存期。所以我想这只是为了缩进。命名:这些是括号:
[]
这些是括号:
()
这些是括号:
{}
这些是V形符号: