2010-04-12 2 views
3

C# 및 VB에서 형식 매개 변수는 형식 매개 변수의 분산을 나타내는 데 사용됩니다.C# 및 VB의 형식 매개 변수 변형에 대한 구문 선택

interface Foo<in X, out Y> { } 

와 VB 버전은 다음과 같습니다 : 예를 들어, C# 버전과 같은 보이는 분산 사양은 기본적으로 제한 장소와 형식 매개 변수를 사용하는 방법, 내가 생각하는 경향이 있기 때문에

Interface Foo(Of In X, Out Y) 

End Interface 

유형 매개 변수에 대한 추가 제한 조건으로 사용됩니다.

나는 그들이 왜 그렇게 대변하지 않는지에 대해 궁금합니다. 즉, 형식 제약 조건 목록에 추가되는 대신 형식 매개 변수에 대한 추가 수정 자로 두 언어로 표현되는 이유는 무엇입니까?

interface Foo<X, Y> where X:in where Y:out { } 

와 VB 버전은 같은 검토 한 것이다 : 그들은 형 제약 인 경우는 C# 버전과 같은 검토 한 것 몇 가지 추론 뒤에이 있다면

Interface Foo(Of X As In, Y As Out) 

End Interface 

그래서 누구나 알고 있나요 이러한 언어로 형식 매개 변수의 분산을 표현하기위한 특정 구문 선택, 아니면 그냥 임의였습니까?

+0

예. 나는 현재의 구현이 더 깨끗해 보인 것에 동의하며, 나는 그것에 대해 아무런 문제가 없다. 그러나 이것들이 단지 추가적인 제약이라면, 빈번히 사용되지 않는 한 특별한 장소를주는 것은 의미가 없습니다. 유형 매개 변수 분산은 정말 좋은 기능이지만 특수 구문을 보증 할만큼 자주 사용하는 것은 상상할 수 없습니다. 그래서 매개 변수 제약 유형으로 취급하는 것이 잘못 됐는지 궁금합니다. – CodeMangler

+0

이것들은 타입 매개 변수의 제약 조건이 아닙니다. 그러나 이것들을 타입의 제약으로 생각하지 않습니다. –

답변

2

저는 언어 디자이너가 좋은 선택을했다고 생각합니다.

이 이유는 공분산 및 반공립성이 유형 (X/Y)에 대한 제약이 아니라 인터페이스 자체에 대한 제약 조건이기 때문입니다. 당신이 where X: in 또는 Of X As In 구문을 사용하는 경우

, 당신은 유형 X에 제약을 제안하고 있습니다. 그러나 공분산과 반공립은 실제로 인터페이스 자체의 "제약"입니다. 인터페이스의 일반적인 유형이 "T"유형을 사용하는 방법입니다.

interface Foo<out X> {} 

당신은 정말 당신이 방법으로 X의 당신의사용을 제약하고 있다고 말하고, "이 인터페이스는 출력으로 X을 사용하여"말을하는지 : 예를 들어, 말에 의한 공분산을 허용합니다. 이 새로운 구문을 도입함으로써 X.

에 제약되지 않기 때문에

이, "X는 특정 유형 constrainted해야합니다"라는 매우 다릅니다, 언어 디자이너는 개념화 우리를 허용 한 이것은 메시지를 혼합하지 않음으로써보다 효과적입니다.

+0

아! 그것은 많은 의미가 있습니다. 그렇게 보지 마라. 그리고이 구문 선택이 좋은 것임에 더 동의하지 않을 것입니다. 이제는 형식 매개 변수 분산 사양이 제약 조건이 아니라는 것을 이해하게되었습니다. 설명해 주셔서 감사합니다 :) – CodeMangler

+0

@CodeMangler : 기꺼이 도와주었습니다. 공분산과 반항은 당신의 머리를 감싸는 일종의 까다 롭습니다. 그렇습니다. 그러나 타입에 대한 제약으로 생각해서는 안됩니다. 정말로 타입을 제약하지 않습니다. :) –