Страницы

Поиск по вопросам

воскресенье, 8 марта 2020 г.

Универсальный класс с параметром в виде универсального класса

#c_sharp #generics


Возможно ли, и если да, то как, создать универсальный (generic) класс, параметром
для которого выступает другой универсальный класс? 

Псевдо-код поясняющий идею:

class Gen where T : class { }   // тут всё ОК
class MoreGen where G : Gen { } // здесь непонятно как сделать


Хочется ограничить параметры для MoreGen только классами Gen, чтобы была возможность
использовать следующий код:

new MoreGen>(); // Должно быть OK
new MoreGen();        // Нужна ошибка компиляции
new MoreGen>();      // Нужна ошибка компиляции

    


Ответы

Ответ 1



На основании упомянутого в комментариях ответа на английском SO, решение "в лоб" не является возможным. Для достижения желаемого эффекта приходится добавлять интерфейс: interface IGen {} class Gen : IGen where T : class { } class MoreGen where G : IGen { } public class Test { public static void Main() { new MoreGen>(); // OK new MoreGen>(); // OK // new MoreGen(); // no implicit reference conversion from `string' to `IGen' // new MoreGen>(); // The type `int' must be a reference type } } Результат выполнения кода

Комментариев нет:

Отправить комментарий