В настоящее время я пытаюсь создать общий интерфейс, который каждый генерирующий класс будет иметь метод, принимающий делегат, который принимает параметр типа и возвращает другой класс того же типа, только с другим типом параметр.Частичное применение генериков для ограничений типов
Я попытался следующие:
public interface GenericInterface<out T, out SomeDerived>
where SomeDerived<T> : GenericInterface<T, SomeDerived>
{
SomeDerived<NT> bind<NT>(bindee<T, NT, SomeDerived<NT>> bindFunc);
}
public delegate AnotherDerived<T2> bindee<in T1, out T2, out AnotherDerived>(T1 param)
where AnotherDerived<T2> : GenericInterface<T2, AnotherDerived>;
public class Derived<T> : GenericInterface<T, Derived>
{
Derived<NT> bind<NT>(bindee<T, NT, Derived<NT>> bindFunc);
}
Но это не может скомпилировать и я получаю эту ошибку:
Invalid token '<' in class, struct, or interface member declaration
Что такое правильный дизайн в таком случае?
EDIT:
Я понимаю облегченную запись причины ошибок компилятора. Вы не можете применять аргумент generic type в параметре where. Я спрашиваю, как лучше всего имитировать такое поведение.
Не могли бы вы показать нам, что * странная * ошибка - полная и полная ошибка со всеми подробностями, пожалуйста. –
хорошо, возможно, странно, это не правильный термин ... Компилятор не любит иметь <> в спецификации «где» – Itay
Недопустимый токен «<» в объявлении члена класса, структуры или интерфейса; Недопустимый токен '>' в объявлении класса, структуры или интерфейса; Недопустимый токен '{' в объявлении члена класса, структуры или интерфейса; Ошибка синтаксиса, ':' Ожидается – Itay