iferença entre interface como restrição de tipo e interface como parâmetr
Se eu quisesse criar um método que toma uma instância deIList
como parâmetro (ou qualquer outra interface, mas vamos usarIList
como exemplo), eu poderia criar um método genérico com uma restrição de tipo, por exemplo
public static void Foo1<T>(T list) where T : IList
{
}
lternativamente, eu poderia criar um método que leva umIList
parâmetro diretamente:
public static void Foo2(IList list)
{
}
ara todos os efeitos, parece que esses métodos se comportam exatamente da mesma maneir
List<string> myList = new List<string>();
Foo1(myList);
Foo2(myList);
Então, aqui está minha pergunta - qual é a diferença entre essas duas abordagens? Parece que a segunda abordagem é um pouco mais legível; existem outras diferenças que eu deva estar ciente (diferentes IL sendo geradas, etc.)? Desde já, obrigado