с использованием C # У меня есть класс, который содержит среди других метаинформации корневой узел ориентированного графа. Давайте назовем это Контейнер-класс . Этот контейнер может отображаться в двух разных режимах: Режим редактора и Режим конфигуратора. В зависимости от режима корневой узел может иметь другой тип NodeEdit или NodeConfig , оба наследуются от одного и того же подкласса.
public abstract class NodeBase
{
string Name { get; set; }
...
}
public class NodeEdit : NodeBase ...
public class NodeConfig : NodeBase ...
Для контейнера я также создаю базовый класс и наследую от него:
public abstract class ContainerBase
{
NodeBase Root { get; set; }
...
}
При создании классов для Editor- и Configuratorcontainer путем наследования от ContainerBase я хочу стать типом Root-свойства определенного (унаследованного от NodeBase) типа, такого как:
public class ContainerEditor : ContainerBase
{
NodeEditor Root { get; set; }
...
}
Но я не могу изменить тип свойства, определенного в ContainerBase. Есть ли способ решить эту проблему? Я могу использовать BaseNode-тип и добавить элемент NodeEditor, например
ContainerEditorInstance.Root = new NodeEditor();
, поскольку тип NodeEditor унаследован от типа BaseEditor, но в классе Container-Editor я хочу явно разрешить только типу Root-свойства быть NodeEditor .
Я мог бы проверить это в установщике и отклонить все узлы, кроме узлов типа NodeEditor, но мне бы хотелось, чтобы свойство было определенного типа, чтобы я мог обнаруживать неправильные назначения во время компиляции.
Заранее спасибо,
Frank