2013-07-26 2 views
4

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(); 
} 
+3

다음은 괄호입니다.'[]'이것은 괄호입니다.'()'이것은 중괄호입니다.'{}'이것은 갈매기 모양입니다 :'<>' –

답변

5

목표는 쉽게 쉽게 코드를 이해하기 위해 코드를 읽을 때 개발자/인간 유형은 계층 적으로 관련이 있는지 이해 할 수 있도록 만 입니다. 그것은 단순히이 경우에 조직 일

4

당신이 명확히 주시겠습니까 : 여기

그것의 코드 샘플입니까?

이들은 단순한 블록입니다. 그들은 같이 범위를 형성 : 블록이 이전 문에 관련된 어떠한 방식에 있음을

Method1(1); 

{ 
    int i = 1; // i is local to this {} block 
    Method1(i++); 
} 
// Here i does not exist any more 

주, 샘플 빈 라인의 부족은 오해의 소지가있을 수 있습니다.

하지만 게시 된 코드에는 변수가 선언되지 않습니다. 그래서 그들은 완전히 불필요합니다. 나는 그들이 몇몇 코드 전처리에서 남겨 졌다고 생각한다. 이 경우

+0

이미 편집되었습니다. 나는 @lightbrick이 생각을 가지고 있다고 생각한다. 이 경우 완전히 화장품입니다. –

+0

@ Karl - Henk이 자신의 게시물을 편집하기 전에이 코멘트를 남겼습니다. – AlexH

+0

처음에는 Autofac의 빌더를 사용하여 이미이 괄호 안에 만들어진 객체의 수명을 관리한다는 것을 알았습니다. 그래서 정말로 들여 쓰기 목적으로 사용 된 것 같습니다. –

1

(예 : 비주얼 스튜디오와 같은 대부분의 IDE 년대에 라인을 들여 것 같은 괄호를 사용하여)

. 중괄호는 범위를 작성하므로 대괄호 안에 선언 된 모든 변수는 해당 코드 블록에 국한됩니다. 그래서 그것이 그것들의 일반적인 목적입니다.

당신이주는 예제에서는 아무 것도 선언하지 않았습니다. 이 경우 Orchard 사람들은 코드를 더 쉽게 이해할 수있는 조직화 방법으로 만 수행하고 있습니다. 당신이 준 예제에서 클래스를 보면 추측 할 수 있습니다. 중괄호로 그룹화 된 것과 비슷한 계층 적 방식으로 관련되어 있음을 알 수 있습니다.