Параметр шаблона C # в качестве интерфейса шаблона - PullRequest
1 голос
/ 14 апреля 2011

Я пытаюсь перевести этот кусок кода с Java на C # и у меня возникают проблемы с поиском правильного синтаксиса

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.

Спасибо.

Ответы [ 2 ]

3 голосов
/ 14 апреля 2011

Нет, эквивалент C # Java будет просто:

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

Один параметр типа в Java, один в C #.

Способ использования класса будет зависеть отчто такое IMyInterface<T> и что его реализует.Например, если бы вместо этого было IEquatable<T>, вы могли бы создать MyClass<int>, потому что int реализует IEquatable<int>.

2 голосов
/ 14 апреля 2011
class MyClass<T> where T: IMyInterface<T>

выглядит хорошо.

Если у вас есть

 class MySecondClass : IMyInterface<MySecondClass>
 {

 }

тогда вы можете использовать

 MyClass<MySecondClass> obj = new MyClass<MySecondClass>();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...