У меня следующая ситуация ниже. Этот код вызовет ошибку компилятора для Test2.net общие ограничения и компиляция объекта наследования
Тип «InheritedChild» не может использоваться как параметр типа «T» в панели «общий тип или метод» GenericIOGrid. Нет никакого неявного преобразования ссылок из 'InheritedChild' в 'SerializerBase'.
public class SerializerBase<T>
{
}
public class DirectChild : SerializerBase<DirectChild>
{
}
public class InheritedChild : DirectChild
{
}
public class panelGenericIOGrid<T> : UserControl
where T: SerializerBase<T>, new()
{
}
...
panelGenericIOGrid<DirectChild> test;
panelGenericIOGrid<InheritedChild> test2;
...
Я убежден мой implentation это funadmentally неправильно. Я хочу, чтобы следующая ситуация: DirectChild и InheritedChild передадут свой тип утверждения в Constialator SerializerBase.
Как заставить код работать так, как ему нужно? Благодаря!
Дополнительная информация о реальной информации. SerializerBase имеет набор статических функций, которые реализованы для автоматической сериализации и десериализации себя на основе их типа.
В DirectChild есть набор строк, которые будут храниться на диске и восстанавливаться.
У Inhertiedchild есть все члены DirectChild plus more.
В основном я буду нуждаться в DirectChild.Serialize (имя файла), и IndirectChild.Serialize (имя файла), где Serialize является членом общественного SerializeBase
Я думаю, что интерфейс - лучший способ пойти. Это будет некоторый дополнительный код, но поскольку каждый метод в BaseSerializer статичен, его не слишком много дополнительной работы. Благодаря! – greggorob64
Если каждый метод статичен, я думаю, что вы действительно должны пойти с подходом mixin ... Наследование не имеет смысла в этом случае, поскольку вы не можете иметь статические методы в интерфейсе, и вы не можете реализовать методы интерфейса со статическими из них. –