Если бы я хотел создать метод, принимающий в качестве параметра экземпляр IList
(или любого другого интерфейса, но в качестве примера возьмем IList
), я мог бы создать общий метод с ограничением типа, например. :
public static void Foo1<T>(T list) where T : IList
{
}
В качестве альтернативы я могу создать метод, который принимает IList
параметр напрямую:
public static void Foo2(IList list)
{
}
Для всех намерений и целей, кажется, что эти методы ведут себя абсолютно одинаково:
List<string> myList = new List<string>();
Foo1(myList);
Foo2(myList);
Так вот мой вопрос - в чем разница между этими двумя подходами? Кажется, что второй подход немного более читабелен; есть ли какие-либо другие различия, о которых я должен знать (различные IL генерируются и т.д.)? Заранее спасибо.