C#模板参数作为模板接口

本文关键字:接口 参数 | 更新日期: 2023-09-27 17:50:08

我正试图将这段代码从Java翻译成C#,但我很难找到正确的synthax

Java:

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。

谢谢。

C#模板参数作为模板接口

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

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

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

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

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

看起来不错。

如果你有

 class MySecondClass : IMyInterface<MySecondClass>
 {
 }

然后你可以使用

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