C#Template参数作为模板接口

时间:2011-04-14 18:24:00

标签: c# java templates

我正在尝试将这段代码从Java转换为C#,但我无法找到正确的synthax

爪哇:

public class MyClass<T extends IMyInterface<T>>

我尝试翻译成C#:

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

如果我public class MyClass<T> where T: IMyInterface<T>,那么类声明中没有编译错误,但我无法弄清楚如何使用该类。

更具体地说,我有一个接口IPoint<T>,它由类EuclideanPoint:IPoint<EuclideanPoint>实现。另外,我有一个模板化的类Clusterer<U>,它不应该关心接口的模板参数,它应该只确保U是IPoint类型。

谢谢。

2 个答案:

答案 0 :(得分:3)

不,Java的C#等价物只是:

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

Java中的一个类型参数,一个在C#中。

您如何使用该类将取决于IMyInterface<T>是什么以及实现它的原因。例如,如果是IEquatable<T>,则可以创建MyClass<int>,因为int实现了IEquatable<int>

答案 1 :(得分:2)

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

看起来不错。

如果你有

 class MySecondClass : IMyInterface<MySecondClass>
 {

 }

然后你可以使用

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