-1

同じインターフェイスを共有し、同じ基本クラスから継承するさまざまなクラスのコンストラクターを呼び出す ManagerClass を持つ方法があるかどうかを知りたいです。ユーザーは実行時に作成するオブジェクトを選択できるため、特定の派生クラス コンストラクター自体を呼び出すことはできません。そのため、実行時までどの派生オブジェクトを作成するかを知ることはできません。

例えば:

public class managerClass : ISomeInterface
{
   public BaseClass apply(someDataType) //(Notice return type is BaseClass) 
   {

派生クラスのコンストラクターを実行するか、本質的に新しい派生オブジェクトを作成し、someDataType をコンストラクターに渡します

   } 
}

public class derivedClass : BaseClass, ISomeInterface
{
   public void doSmthg(){manipulate data and store}
}
public class derivedClass2 : BaseClass, ISomeInterface
{
   public void doSmthg(){manipulate data in another way and store}
}

現在、 managerClass は同じ BaseClass から継承されていませんが、これが何らかの形で私がやりたいことを実行できるようにするのに役立つ場合、この変更を行うことに反対しません。

4

3 に答える 3

0

あなたの問題は何ですか?確かにあなたは言うことができます:

public BaseClass Apply(SomeDataType someDataType)
{
  BaseClass instance;
  if (/* your condition */)
  {
    var dc = new DerivedClass();
    // do stuff to/with dc
    instance = dc;
  }
  else
  {
    var dc2 = new DerivedClass2();
    // do stuff to/with dc2
    instance = dc2;
  }
  // do common stuff to/with instance
  return instance;
}
于 2013-09-24T14:43:15.920 に答える
0

Activatorクラスを見てみましょう:

Type type = typeof(derivedClass2);
ISomeInterface instance = (ISomeInterface)Activator.Create(type);

型の代わりにクラス名を渡すなど、さらにいくつかのオーバーロードがあります。

詳細: http://msdn.microsoft.com/en-us/library/system.activator.aspx

それ以外の場合は、Factory Design Patternここを参照してください http://msdn.microsoft.com/en-us/library/ee817667.aspx

于 2013-09-24T14:41:57.373 に答える