2 가지 시나리오가 있습니다.C에서 형식 매개 변수의 '어휘'범위 지정
이 실패
class F<X>
{
public X X { get; set; }
}
오류 CS0102을 : 유형 'F<X>
가'이미에 대한 정의를 포함 'X
'
이 작동 :
class F<X>
{
class G
{
public X X { get; set; }
}
}
유일한 논리적 인 설명을 두 번째 스 니펫에서 type 매개 변수 X가 범위를 벗어났습니다. 사실이 아닙니다.
형식 매개 변수가 형식에서 내 정의에 영향을주는 이유는 무엇입니까?
IMO는 일관성을 위해 둘 다 작동해야하거나 작동하지 않아야합니다.
다른 아이디어?
추신 : 저는 이것을 '어휘'라고 부르지 만 올바른 용어는 아닙니다.
업데이트 :
헹크의 대답은 당으로, 여기에 제네릭이 아닌 동일한 동작을 표시 버전 만 grok 수에 아마 쉽다.
실패 :
class F
{
class X { }
public X X { get; set; }
}
작품 : 내가 무엇을 볼 수에서
class X { }
class F
{
public X X { get; set; }
}
는, C# 컴파일러가 타입 정의 boundries에서 어휘 범위를 만듭니다.
또한 유형과 구성원 이름이 동일한 '위치'(또는 LISP 측면에서 namespace
)에 있다는 것을 의미합니다.
나는 왜 처음 작동하지 않습니까? 누구든지 컴파일러 오류를 재현 할 수 있습니까? –
@Ori : 그냥 사용해보십시오. :) – leppie
업데이트에 따르면 마르셀로가 귀하의 질문에 답변 한 것처럼 보입니다. 그는 똑같은 것을 보여주었습니다. – Kobi