나는 다음 (C# .NET4)와 같은 인터페이스의 스키마를중첩 된 제네릭 인터페이스
interface A
{
}
interface B
{
List<A> a;
}
interface C
{
List<B> b;
}
와 나는이 방법으로 그것을 구현 오류 제네릭 형식 'B'를 사용하려면 1 개의 형식 인수가 필요합니다.
나는 다음 (C# .NET4)와 같은 인터페이스의 스키마를중첩 된 제네릭 인터페이스
interface A
{
}
interface B
{
List<A> a;
}
interface C
{
List<B> b;
}
와 나는이 방법으로 그것을 구현 오류 제네릭 형식 'B'를 사용하려면 1 개의 형식 인수가 필요합니다.
interface B<T>
은 일반 형식이기 때문에 공식 형식 인수를 제공해야합니다 interface C<T>
을 선언 할 때 즉, 현재 문제는 컴파일러가 인터페이스 B 인터페이스 C가 "상속받는"유형을 알리지 못한다는 것입니다.
두 개의 T
은 반드시 같은 유형을 나타내는 것은 아닙니다. 그들은
public interface C<T> where T : B<T>, A { ... }
에서와 같이 동일한 유형이 될 수도 있고 두 가지 종류가 될 수 있습니다
public interface C<T, U> where T : B<U> where U : A { ... }
유형 인수에 대한 제한은 물론 엄격한 첫 번째 경우에 있습니다.
C는 일반용 유형 (더 나은 단어가 부족함)처럼 보입니다.
이 C 정의가 대신 작동합니까? 인터페이스 B
에서 제네릭 형식 이후
public interface C<T,U> where T : B<U> where U : A
{
List<T> b{ get; set; }
}
는 인터페이스 C
당신이 유형 B<A>
의 T
를 선언 할 필요가 입력 A
의 인스턴스가 될 수 있습니다
public interface A { }
public interface B<T> where T : A
{
List<T> a { get; set; }
}
public interface C<T> where T : B<A>
{
List<T> b { get; set; }
}
이렇게하면 <List<T>>
곳 T
이 있기 때문입니다 예를 들어 B<T>
일 때 B
의 유형을 지정해야하는 List<B>
으로 표시됩니다. 이것이 귀하의 오류의 원인입니다.
public interface C<T, T2> where T : B<T2>
where T2 : A
{
List<T> b { get; set; }
}
A
에 출연 T2
그리고 당신은 당신이 목적을 해결 않습니다
public interface A { }
public interface B<T> where T : A
{
List<T> a { get; set; }
}
public interface BA : B<A>
{
}
public interface C<T> where T : BA
{
List<T> b { get; set; } // << ERROR: Using the generic type 'B<T>' requires 1 type arguments
}
처럼 여기 또 하나의 인터페이스를 추가 할 수 있습니다 :
잘 될 것입니다?
인터페이스를 구현하지 않습니다 ... – Maarten
잘못된 동사를 사용했습니다. :) 기본적으로 모든 asnwers가 좋습니다. 모두 감사합니다. – Davide