0
C#
では、ジェネリックメソッドの動作を変更するためにジェネリック引数を使用することは一般に悪い習慣ですか?例ではCLRジェネリックメソッドの型に基づく分岐
:
class Foo { }
class Bar { }
void GenericMethod<T>()
{
if (typeof(T) == typeof(Foo))
{
Console.WriteLine("execute action for Foo");
}
if (typeof(T) == typeof(Bar))
{
Console.WriteLine("execute action for Bar");
}
}
void NonGenericMethod(Type type)
{
if (type == typeof(Foo))
{
Console.WriteLine("execute action for Foo");
}
if (type == typeof(Bar))
{
Console.WriteLine("execute action for Bar");
}
}
さておきパフォーマンスの違い、どちらの方法も同じ効果があります。
私が疑問に思うのは、ジェネリック引数を使ってメソッドの振る舞いを変更する(分岐を行う)かどうかです。これは副作用と考えることができますか?
_パフォーマンスの違いは? - パフォーマンスにはどのような違いがありますか? – stuartd
オーバーロードを使用できないとしたら、それは本質的に間違っていることはありません。 – Rob
あなたはSquareとCircleの両方の基底クラスにそのメソッドを配置している可能性があるので、通常の継承を使用してください。さもなければ、それほど大きな違いはありません。 – Evk