2

私はこのようなことをしたいと思います:

public static void Initialize<T>(T obj) where T : BaseClass
{
  SetDefault(obj);
}

private static void SetDefault(AInheritedFromBaseClass thing)
{
  // do something
}

private static void SetDefault(BInheritedFromBaseClass thing)
{
  // do something
}

したがって、obj を初期化するたびに、正しいメソッドに向けられます。それは可能ですか?

これらのメソッドは外部クラスであるため、クラス自体に実装することはできません。したがって、基本的には、好きなように初期化する一般的な方法が必要です。次のようなことは避けたいです。

if (obj is TypeA)
{
  ClassThis();
} else if (obj is TypeB)
{
  CallThat();
}
//etc.
4

2 に答える 2

0

それらが外部クラスであり、それらの初期化方法を変更する必要がある場合は、回避策を考え出すのではなく、アダプター パターンのようなものを使用します。

また、3 番目のBaseClass実装を追加する必要があり、別のSetDefaultオーバーロードを追加するのを忘れた場合、ソリューションは実行時にクラッシュします。それに頼ってはいけません。

于 2013-09-05T09:06:54.650 に答える