2009-07-10 8 views
7

다음은 내가 잠시 동안 가지고 있었던 질문이지만 실제로 묻지는 않았습니다 ....Net 디자이너 파일에서 global :: mean은 무엇을 의미합니까?

Visual Studio에서 생성 된 상당수의 디자이너 파일 중 일부는 global : Can 어떤 사람이 이것이 무엇을 의미하는지,이 접두어가 무엇을하는지 그리고 내가 그것을 어디에 사용해야하는지 설명합니다.

답변

12

글로벌 네임 스페이스 한정자를 사용하면 전역 ("빈") 네임 스페이스의 멤버에 액세스 할 수 있습니다.

MyNamespace.MyClass.DoSomething()이 아닌 MyClass.DoSomething()과 같이 한정되지 않은 유형을 호출하는 경우 현재 네임 스페이스에 있다고 가정합니다. 그런 다음 유형을 전역/빈 네임 스페이스에 있다고 어떻게 말할 수 있습니까?

이 코드 예제 (콘솔 응용 프로그램)의 동작을 설명한다 :

using System; 

namespace MyNamespace 
{ 
    public class Program 
    { 
     static void Main(string[] args) 
     { 
      MessageWriter.Write();   // writes "MyNamespace namespace" 
      global::MessageWriter.Write(); // writes "Global namespace" 
      Console.ReadLine(); 
     } 
    } 

    // This class is in the namespace "MyNamespace" 
    public class MessageWriter 
    { 
     public static void Write() 
     { 
      Console.WriteLine("MyNamespace namespace"); 
     } 
    } 
} 

// This class is in the global namespace (i.e. no specified namespace) 
public class MessageWriter 
{ 
    public static void Write() 
    { 
     Console.WriteLine("Global namespace"); 
    } 
} 
+0

이것은 왜 질문에 대답하지 않습니다. 생성 된 코드는 네임 스페이스에 선언 된 유형을 사용하지만 여전히 global ::이 사용됩니다. –

+0

@Ihar : Global은 비슷한 방식으로 네임 스페이스가 하위 네임 스페이스가 아니어야 함을 지정하는 데 사용됩니다 ... –

+0

아니요 -이 질문은 세 가지를 묻습니다.이게 무슨 뜻인지 (설명),이 접두사가하는 일 (설명) 및 위치 그것을 사용해야합니다 (다른 두 점을 이해하면 알 수 있습니다). 질문 - "디자이너 파일에 왜 사용 되는가"는 원래의 질문자가 묻지 않았습니다. –

1

왼쪽 식별자가 전역 here, 시작 전역 네임 스페이스에 적절한 식별자에 대한 검색에서.

+0

정답을 가리 킵니다. –

4

접두어는 전역 이름 공간을 나타냅니다. 다음은 그 예입니다.

namespace Bar { 
    class Gnat { } 
} 
namespace Foo { 
    namespace Bar { 
    class Gnat { } 
    } 
    class Gnus { 
    Bar.Gnat a; // Foo.Bar.Gnat 
    global::Bar.Gnat b; // Bar.Gnat 
    } 
} 

회원 a가 실수로 Foo.Bar.Gnat 클래스를 참조하는 방식에 유의하십시오. 이것을 피하려면 global :: 접두어를 사용하십시오.

+0

생성 된 코드와 어떤 관련이 있습니까? 일반적으로 .net 디자이너 클래스에서는 전역 네임 스페이스의 유형을 참조하지 않습니다. –

+0

코드 생성기가 Bar.Gnat 클래스를 참조하려고합니다. 코드가 Foo 네임 스페이스 내에 생성 된 경우 global :: 접두사가 사용되지 않는 한 Foo.Bar.Gnat 클래스가 참조됩니다. 코드 생성기는 생성 된 코드를이 실수로부터 보호하려고합니다. 그것은 다소 편집증 적이지만 그럼에도 올바른 일이며 아마도 내부 Microsoft 표준 일 것입니다. –

3

글로벌 :: 네임 스페이스 한정자는 중첩 된 네임 스페이스를 통해 해결하는 유형의 충돌을 방지하기 위해 자동 생성에 사용됩니다.

관련 문제