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

发布于 2024-11-01 18:09:08 字数 609 浏览 0 评论 0原文

我正在尝试将这段代码从 Java 翻译为 C#,但在找到正确的 Syntax

Java:

public class MyClass<T extends IMyInterface<T>>

My attempts at Translation into C#:

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

If I do public class MyClass;其中 T: IMyInterface ,类声明处没有编译错误,但我不知道如何使用该类。

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

谢谢。

I am trying to translate this piece of code from Java to C# and I am having trouble finding the correct synthax

Java:

public class MyClass<T extends IMyInterface<T>>

My attempt at translating into C#:

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

If I do public class MyClass<T> where T: IMyInterface<T> , there is no compile error at the class declaration, but I cannot figure out how to use the class.

More specifically, I have an interface IPoint<T>, which is implemented by class EuclideanPoint:IPoint<EuclideanPoint>. Also, I have a templated class Clusterer<U>, which should not care about the template parameter of the interface, it should only make sure that U is of type IPoint.

Thank you.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

伏妖词 2024-11-08 18:09:08

不,Java 的 C# 等效项只是:

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

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

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

No, the C# equivalent of the Java would just be:

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

One type parameter in the Java, one in the C#.

How you use the class will depend on what IMyInterface<T> is and what implements it. For example, if it were IEquatable<T> instead, you could create a MyClass<int> because int implements IEquatable<int>.

南笙 2024-11-08 18:09:08
class MyClass<T> where T: IMyInterface<T>

看起来不错。

如果你有

 class MySecondClass : IMyInterface<MySecondClass>
 {

 }

那么你可以使用

 MyClass<MySecondClass> obj = new MyClass<MySecondClass>();
class MyClass<T> where T: IMyInterface<T>

looks good.

If you have

 class MySecondClass : IMyInterface<MySecondClass>
 {

 }

then you can use

 MyClass<MySecondClass> obj = new MyClass<MySecondClass>();
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文