В 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