с использованием C #. У меня есть класс, который содержит, помимо другой метаинформации, корневой узел ориентированного графа. Назовем его контейнерным классом . Этот контейнер может отображаться в двух разных режимах: Editor-Mode и Configurator-Mode. В зависимости от режима корневой узел имеет другой тип 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 я хочу, чтобы тип корневого свойства стал специфическим (унаследованным from NodeBase), например:
public class ContainerEditor : ContainerBase
{
NodeEditor Root { get; set; }
...
}
Но я не могу изменить тип свойства, определенного в ContainerBase. Есть ли способ решить эту проблему? Я могу использовать тип BaseNode и добавить элемент NodeEditor, например
ContainerEditorInstance.Root = new NodeEditor();
, потому что тип NodeEditor унаследован от типа BaseEditor, но в классе Container-Editor я хочу явно разрешить только тип свойства Root для be NodeEditor . Я мог бы проверить это в установщике и отклонить все узлы, кроме узлов типа NodeEditor, но я бы хотел, чтобы свойство было определенного типа, чтобы я мог обнаруживать неправильные назначения во время компиляции.
Заранее спасибо,
Фрэнк