1

私が書いたコードを改善しようとしていますが、あなたの助けが必要です。

基本的に、私は2つのクラスを持ってTypeARecommendationFormおり、TypeBRecommendationFormそれは継承されており、オブジェクトを新しいオブジェクトGenericRecommendationFormにコピーしようとしています.oRecommendation

そのために、タイプをチェックして、使用するクラスを確認しています。

問題は、継承する新しいクラスを作成することがありGenericRecommendationForm、すべてのコードを調べて、いくつかの場所に if ステートメントを追加する場所を確認する必要があることです。

私が望むのは、新しいクラスを追加するときにリストに追加するだけでよいように、クラスのリストを作成することです。

誰もそれを行う方法を知っていますか?

コードは次のとおりです。

GenericRecommendationForm oRecommendation= new GenericRecommendationForm ();
...
if (oRecommendation.GetType() == typeof(TypeARecommendationForm))
{
    recommendationForm = new TypeARecommendationForm((TypeARecommendationForm)oRecommendation);
}
if (oRecommendation.GetType() == typeof(TypeBRecommendationForm))
{
    recommendationForm = new TypeBRecommendationForm((TypeBRecommendationForm)oRecommendation);
}
else if (oRecommendation.GetType() == typeof(GenericRecommendationForm))
{
    recommendationForm = new GenericRecommendationForm(oRecommendation);
}

よろしくお願いします。

4

2 に答える 2

4

これを実現する最も簡単な方法は、すべての派生フォームがオーバーライドするGenericRecommendationForm仮想メソッドを提供することです。Clone

public class GenericRecommendationForm 
{
    // ...

    public virtual GenericRecommendationForm Clone()
    {
        return new GenericRecommendationForm(this);
    }
}

public class TypeARecommendationForm
{
    // ...

    public override GenericRecommendationForm Clone()
    {
        return new TypeARecommendationForm(this);
    }
}

public class TypeBRecommendationForm
{
    // ...

    public override GenericRecommendationForm Clone()
    {
        return new TypeBRecommendationForm(this);
    }
}
于 2013-05-16T08:34:07.887 に答える