#c_sharp #generics
Возможно ли, и если да, то как, создать универсальный (generic) класс, параметром для которого выступает другой универсальный класс? Псевдо-код поясняющий идею: class Genwhere 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 } } Результат выполнения кода
Комментариев нет:
Отправить комментарий