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。
谢谢。
不,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>();