2016-11-04 5 views
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"); 
    } 
} 

さておきパフォーマンスの違い、どちらの方法も同じ効果があります。

私が疑問に思うのは、ジェネリック引数を使ってメソッドの振る舞いを変更する(分岐を行う)かどうかです。これは副作用と考えることができますか?

+0

_パフォーマンスの違いは? - パフォーマンスにはどのような違いがありますか? – stuartd

+0

オーバーロードを使用できないとしたら、それは本質的に間違っていることはありません。 – Rob

+0

あなたはSquareとCircleの両方の基底クラスにそのメソッドを配置している可能性があるので、通常の継承を使用してください。さもなければ、それほど大きな違いはありません。 – Evk

答えて

0

ジェネリックメソッドを使用しての良いところは、あなたがさらにリフレクションを使用せずに、他の一般的なメソッドを呼び出すことができるということです。

void GenericMethod<T>() 
{ 
    AnotherGenericMethod<T>(); 
} 

非ジェネリックメソッドが同じ呼び出しを行うためにリフレクションが必要です。

関連する問題