なしで可能性のある派生オブジェクトを追加する方法がありますかベースオブジェクトまたは派生オブジェクトのインスタンスを独自に作成できるようにしますか?私はそれがほぼ矛盾していると考えています。私が思い付くことができていた唯一の方法について派生子クラスのコレクション
はこのような子供の基本実装から親コレクションに追加することです。
// Child constructors
private void Child() { }
protected void Child(Parent parent)
{
parent.Collection.Add(this);
}
これは、常にでインスタンス化される子オブジェクトを強制的に親であるが、親コレクションに子クラスを追加するのはむしろ面倒な実装のようである子供から。私はメソッドにType型の変数を渡すことができ、これは行く方法かもしれませんが、渡された型に作成/キャストする方法がわかりません。
アップデート:私は場合には、これは誰もが私が何をしたいのより良い絵を与え、可能な汎用的なChildCollection.Add方法として、このようなコードで遊んだ...我々はそれかどうかを確認します
// Currently testing directly in Parent class;
// can later be moved/modified for Parent's ChildCollection class.
public Child AddTest(string info, Type derivedType)
{
ConstructorInfo ci = derivedType.GetConstructor(new Type[] { typeof(Parent) });
Child myBaby = (Child) ci.Invoke(new Object[] { this });
myBaby.Initialize(info);
return myBaby;
}
これは、その後のようなコードで呼び出すことができます:あなたが親タイプのインスタンスを作成できるようにする必要がないことについて深刻だった場合は、単にその作り、
Child newChild = Parent.AddTest("Hello World", typeof(DerivedChild));
パブリックコンストラクタではなく、抽象基本クラス、派生型、およびファクトリメソッドが必要ですか?しかし、なぜ? –
親クラスとの関連付けを強制するには、親なしでは存在できず、セットアップ中に特定のコールチェーンに従うので、オーバーライド可能なメソッドをそのコンストラクタの基本クラスから呼び出すべきではないからです。 – RobinHood70
PSでは、基本クラスは抽象クラスではありません。そのメソッドのいくつかのオーバーライドを可能にする本格的な実装です。 – RobinHood70