2011-04-14 7 views
1

나는 C#을 자바에서이 코드 조각을 번역하려고 내가 문제가 올바른 synthax을 찾는 데C# 템플릿 매개 변수

자바 :에 번역에서

public class MyClass<T extends IMyInterface<T>> 

내 시도 C 번호 : 나는 public class MyClass<T> where T: IMyInterface<T> 할 경우

public class MyClass<T, U> where T: IMyInterface<U> 

, 클래스 선언에서 어떤 컴파일 오류가없는,하지만 난 클래스를 사용하는 방법을 알아낼 수 없습니다.

더 구체적으로 말해서, IPoint<T> 인터페이스를 가지고 있으며, 이는 EuclideanPoint:IPoint<EuclideanPoint> 클래스로 구현됩니다. 또한 템플릿 템플릿 클래스 Clusterer<U>이 있는데, 인터페이스의 템플릿 매개 변수에 신경을 써서는 안되며, U가 IPoint 유형인지 확인해야합니다.

감사합니다.

+0

IMyInterface를 구현할 클래스입니까? –

+0

공용 클래스 MyClass : IMyInterface ? –

+0

아니요, 인터페이스를 구현하려고하지 않습니다. 템플릿 클래스의 형식 매개 변수로 전자 템플릿 인터페이스를 사용하려고합니다. – cvlad

답변

3

아니, 자바는 C# 동등한은 다음과 같습니다 자바에서

public class MyClass<T> where T : IMyInterface<T> 

한 유형 매개 변수 , 하나는 C#.

클래스를 사용하는 방법은 IMyInterface<T>의 정의와 구현 방법에 따라 다릅니다. 예를 들어, IEquatable<T> 인 경우 intIEquatable<int>을 구현하기 때문에 MyClass<int>을 만들 수 있습니다.

+0

이 버전을 시도했지만이 작업을 시도 할 때 : MyClass > c = new MyClass >()와 같은 것을 얻을 수 있습니다. "IMyInterface '에서'IMyInterface > ''로 암시 적 참조 변환이 없습니다. 여기서 T는 또 다른 템플릿 매개 변수입니다. – cvlad

+1

@ratzinho : 아니요, 맞습니다 - 'class Foo : IMyInterface ' 계약을 만족시키지 못한다. 당신이 성취하려는 것을 설명 할 수 있다면 정말 도움이 될 것입니다. –

+0

힌트가 도움이되었습니다. 나는 이것을 할 수 있었다 : MyContainerClass T : IMyInterface 그리고 나서 MyContainerClass 내부에서 다음과 같은 클래스를 인스턴스화했다 : MyClass c = new MyClass () – cvlad

2
class MyClass<T> where T: IMyInterface<T> 

당신은

class MySecondClass : IMyInterface<MySecondClass> 
{ 

} 

후 사용할 수있는 경우

MyClass<MySecondClass> obj = new MyClass<MySecondClass>();