2016-11-04 48 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>(); 
} 

非泛型方法需要反思,使同樣的電話。