2010-03-02 2 views
6

내가 사용했던 C 번호에 typedef 문제에 대한 답변을 많이 봤어요, 그래서 나는이 :중첩 별명은

using Foo = System.Collections.Generic.Queue<Bar>; 

이 잘 작동합니다. 나는 정의를 바꿀 수있다. (바 => 동물원 등) Foo를 사용하는 모든 것이 바뀐다. 큰.

using Foo = System.Collections.Generic.Queue<Bar>; 
using FooMap = System.Collections.Generic.Dictionary<char, Foo>; 

하지만 C#을 내가 처음에 그것을 정의한에도 불구하고, 두 번째 줄에 Foo을 좋아하지 않는 것 :

는 지금은이 작업을 할 수 있습니다.

기존 별칭을 다른 별칭으로 사용하는 방법이 있습니까?

편집 : 나는 대답은 '노처럼 보이는없는 표준에 따르면 VS2008

+0

은 TBH이 버그 – Codesleuth

+0

처럼 보이는 Codesleuth에 동의 - 푸 별칭 인 경우 여전히 실패 (System.Int32와 같은) 단순한 타입의 경우, 이것은 컴파일러 버그라고 생각합니다. –

+1

@Codesleuth @Dan, Dave의 대답에 대해 언급 하시겠습니까? – quamrana

답변

13

을 사용하고 있습니다. Section 16.3.1에서, 제 6 항 :

1 사용하여 별명-지시가 기록되는 순서는 사용-ALIAS-에 의해 참조 네임 스페이스 또는 형식-이름의 의미 및 해상도가 없습니다 지시문은 에 영향을 미치지 않고 단위 또는 네임 스페이스 본문이 포함 된 의 using-alias-directive 자체 또는 다른 사용 지시문에 의해 영향을받지 않습니다. 바로 포함 컴파일 단위 나 네임 스페이스 몸이 없이 사용-지시가 있다면 다른 즉

(2), 사용-앨리어스 지침의 네임 스페이스 또는 형식 이름은 으로 해결됩니다.

편집 :

난 그냥 위의 링크에서 버전이 조금 최신 버전이 아닙니다. 4th Edition에있는 해당 단락의 텍스트가보다 자세하지만 다른 사용자의 별칭을 사용한 참조는 여전히 금지되어 있습니다. 또한이를 명시 적으로 보여주는 예제가 포함되어 있습니다.

당신은 같은 것을 멀리 얻을 수 있습니다 입력의 범위를 지정하고 힘을 필요에 따라 :

class Foo : System.Collections.Generic.Queue<Bar> 
{ 
}