2011-04-14 17 views
1

私はJavaからC#にコードのこの作品を翻訳しようとしていると私は、トラブル正しいsynthaxを見つけるのを持っていますC#テンプレートのパラメータ

のJava:に翻訳で

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

いいえ、私はインターフェイスを実装しようとしていません。テンプレート化されたクラスの型パラメータとしてeテンプレート化されたインターフェイスを使用しようとしています – cvlad

答えて

3

を使用することができます、C#で1つ。

どのようにクラスを使用するかは、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> 

が良好に見える。

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

Javaで一つの型パラメータ:あなたは

class MySecondClass : IMyInterface<MySecondClass> 
{ 

} 

をお持ちの場合は

は、[いいえ、ジャワのC#の同等がちょうどだろう

MyClass<MySecondClass> obj = new MyClass<MySecondClass>(); 
関連する問題