Страницы

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

четверг, 30 мая 2019 г.

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

Возможно ли, и если да, то как, создать универсальный (generic) класс, параметром для которого выступает другой универсальный класс?
Псевдо-код поясняющий идею:
class Gen where T : class { } // тут всё ОК class MoreGen where G : Gen { } // здесь непонятно как сделать
Хочется ограничить параметры для MoreGen только классами Gen, чтобы была возможность использовать следующий код:
new MoreGen>(); // Должно быть OK new MoreGen(); // Нужна ошибка компиляции new MoreGen>(); // Нужна ошибка компиляции


Ответ

На основании упомянутого в комментариях ответа на английском 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 } }
Результат выполнения кода

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

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