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

따로 성능 차이, 두 방법은 동일한 효과를 가질 것이다.

궁금한 점은 generic 인수를 사용하여 메서드의 동작을 수정하는 것입니다 (분기를 수행하는 것이 좋습니다). 이것이 부작용으로 간주 될 수 있습니까?

+0

_ 성능 차이는 무엇입니까? - 성능간에 어떤 차이가 있습니까? – stuartd

+0

오버로드를 사용할 수 없다고 가정하면 (왜 그렇지 않습니까?) 본질적으로 잘못된 것은 아닙니다. – Rob

+0

Square와 Circle의 기본 클래스에이 메서드를 넣을 수 있으므로 일반적인 상속을 사용하십시오. 그렇지 않으면 많은 차이가 없습니다. – Evk

답변

0

일반적인 방법을 사용하는 방법에 대한 좋은 것은 당신이 더 반사를 사용하지 않고 다른 일반 메소드를 호출 할 수 있다는 것입니다 :

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

비 일반적인 방법은 같은 전화를 걸 반성이 필요합니다.