Изменение типа унаследованного свойства (на унаследованный тип)

с использованием 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, но я бы хотел, чтобы свойство было определенного типа, чтобы я мог обнаруживать неправильные назначения во время компиляции.

Заранее спасибо,
Фрэнк

8
задан Aaginor 4 November 2011 в 10:35
поделиться