2012-05-13 7 views
3

?차이 여기서 T : BaseObject와 푸 <BaseObject></p> <pre><code>Foo<T> where T : BaseObject </code></pre> <p>및</p> <pre><code>Foo<BaseObject> </code></pre> <p>의 차이는이 사항이 동일하지 않습니다 무엇

+0

[C# generic "where"constraint "where"generic type "정의?] (http://stackoverflow.com/questions/1541152/c-sharp-generic-where-constraint-with-any-generic) -type-definition) –

+2

질문이 중복되는 곳을 보지 못했습니다 ... – MUG4N

답변

7

아니요, 동일하지 않습니다. 와

:

Foo<T> where T : BaseObject 

TBaseObject 유형과 상속자가 될 수 있습니다. 와

:

Foo<BaseObject> 

TBaseObject 정확히 (더 분산 수식은 제네릭 형식 매개 변수에 Foo에 선언되지 않았다 가정) 여야합니다.

+0

BaseObject가 추상 클래스 인 경우,'InheritedObject'가'Foo '에 대해 작동하지 않습니다.'InheritedObject : BaseObject'? –

+2

@TravisJ - 아니요, 공분산이 제네릭 형식 매개 변수에 선언되어 있지 않으면. – Oded

0

이 고려 : Foo<BaseObject>와 마찬가지로

var list = new List<object>(); 
list.Add("Hello"); 
Console.WriteLine(list[0].Length); // doesn't compile 

, 푸의 소비자는 푸의 T 회원의 BaseObject 회원에 액세스 할 수 있습니다. With Foo<T> where T : BaseObject, Foo의 소비자는 파생 형식이 실제로 형식 인수로 전달되는 모든 멤버에 액세스 할 수 있습니다.