私は、私のプロジェクトにクラスのグループ(以下の戦略パターン)を持っています。 main関数では、サーバーからenum値を受け取り、それに基づいて基本クラス型のオブジェクトを作成します。enumを使用してクラスの型を解決する方法
私はswitch/caseステートメントを使用してこれを実現しています。 Open/Closedの原則では、新しいクラスが追加されるたびに新しいcase文を追加する関数を開くことができません。
私はActivator.CreateInstance()
を使用することを考えています。それには何か欠点がありますか?
列挙型からオブジェクトを作成する他の方法はありますか?
それはあなたが関数に列挙型から辞書を使用することができ、本格的な戦略パターン
abstract public class Mammal
{
public abstract void MakeSound()
}
class Cat:Mammal
{
public override void MakeSound()
{
Console.WriteLine("Meow");
}
}
class Dog:Mammal
{
public override void MakeSound()
{
Console.WriteLine("Bow");
}
}
Main()
{
MammalTypes mammalType = RecieveValueFromServer();
Mammal mammalBase
switch(mammalType) // need to make this dynamic depending upon Enum type
{
case MammalTypes.Cat:mammalBase = new Cat()
break;
case MammalTypes.Dog:mammalBase = new Dog()
break;
}
mammalBase.MakeSound()
}
** **はオブジェクト指向ではありません。基本クラスは、それが派生クラスであることを認識すべきではありません。 – gdoron
あなたがしたことを視覚化するのは難しいです。あなたの質問に書いたコードを追加してください。 – Abbas