C#を使用しています。他のメタ情報の中に有向グラフのルートノードを含むクラスがあります。これをコンテナクラスとしましょう。このコンテナは、エディタモードとコンフィグレータモードの2つの異なるモードで表示できます。モードに応じて、ルートノードのタイプは同じです。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; }
...
}
ContainerBaseから継承してEditorのとConfiguratorcontainerのためのクラスを作成、私はのタイプになりたい場合は - ルート(NodeBaseから継承)プロパティの特定は次のように入力します。
public class ContainerEditor : ContainerBase
{
NodeEditor Root { get; set; }
...
}
しかし、私はContainerBaseで定義されたプロパティの種類を変更することはできません。この問題を解決する方法はありますか?私はBaseNode型を使用し、型NodeEditorが型BaseEditorから継承されているので
ContainerEditorInstance.Root = new NodeEditor();
ようNodeEditorの要素を追加しますが、コンテナエディタクラスで、私は明示的のみのタイプを許可することができますルートプロパティはNodeEditorです。 私はsetterでこれをチェックし、NodeEditor型のノード以外のすべてのノードを拒否できますが、プロパティを特定の型にしたいので、コンパイル時に間違った割り当てを検出できます。事前に
おかげで、
フランク
こんにちはマーク、返信いただきありがとうございます!私はすでに再宣言でそれを試していましたが、おそらく私は間違ったことをしました。私はあなたのアプローチをテストし、それは正常に動作します!一般的に、ジェネリックスまたはその逆の方が再宣言が優先されるべきか、それとも同等であるべきなのでしょうか? – Aaginor
この全体のジェネリックなものは、ジェネリックベースクラスを使用する必要がある場合、つまり抽象的な型の戻り値として使用する場合に重大な問題を引き起こしています。だから私は再宣告をするつもりです、それはあまり邪魔にならないようです。 「新規」および「上書き」と比較して、内部宣言の再宣言はどのように機能していますか?それについてお勧めすることができる良い記事はありますか?再度、感謝します! – Aaginor