2014-06-05 3 views
5

는 C#에서 어셈블리와 네임 스페이스 충돌을 해결하기 위해, 나는 별칭NLog 중 하나를 주었다 : 이제extern 별칭이 C#에서 어떤 용도로 사용됩니까?

enter image description here

, 나는 내에서 네임 스페이스 참조 할 수 조립과 같이 :

public class Logger : NLog::NLog.LogReceiverService 
{ 
    // ... 
} 

그러나 내 파일 상단에 extern alias 키워드를 사용할 때까지 컴파일되지 않습니다.

extern alias NLog; 

내 질문 :

extern alias 키워드가 어떤 목적에 봉사 하는가? NLog::NLog.LogReceiverService은 어셈블리 별칭, 네임 스페이스 및 형식을 완전히 명확하게하기에 충분합니까?

+1

* 참고 : * 예, 같은 정규화 된 형식 두 어셈블리를 명확하게하는 방법을 간략하게 설명합니다 많은 StackOverflow의 게시물뿐만 아니라 블로그 기사가 여기에

는 통근 별칭에 대한 참고 자료입니다. 그들 모두는 기본적으로 extern alias 키워드 *를 사용하지만 * why *는 말하지 않는다고 말합니다. 제 질문은'Alias ​​::'가 충분할 때 컴파일러가 * extern 별칭 * 키워드를 필요로하는 이유입니다. –

답변

4

참조에 대한 별칭 속성을 설정하면 어셈블리 참조의 초기로드가 런타임에 프로젝트에 대해 수행되는 동안 해당 별칭으로 만 지정됩니다. 파일에서 앨리어싱 된 어셈블리 참조를 사용하려면 컴파일러 지시어가 별칭을 찾도록 설정하는 extern alias 키워드를 통해이 앨리어스 키워드를 사용하도록 지정해야합니다.

일부 유형의 전역 앨리어싱이 있다고 생각 하겠지만 별칭에 대해 발생하는 성능 저하로 인해 강제로 별칭 사용을 강요한다고 생각합니다. http://msdn.microsoft.com/en-us/library/ms173212.aspx

관련 문제