avaliar o custo / benefício do uso de métodos de extensão em C # => 3.0 [fechado]

Em que circunstâncias (cenários de uso) você escolheria escrever uma extensão em vez de subclassificar um objeto?

<divulgação completa: não sou funcionário de MS; Não conheço Mitsu Furota pessoalmente; Eu conheço o autor da biblioteca de código aberto da Componax mencionada aqui, mas não tenho relações comerciais com ele; Eu não estou criando, ou planejando criar qualquer produto comercial usando extensões: em suma: este post é da pura curiosidade intelectual relacionada à minha tentativa de (continuamente) me tornar consciente das "melhores práticas">

Eu acho a idéia de métodos de extensão "legal" e, obviamente, você pode fazer coisas "muito distantes" com eles, como nos muitos exemplos que você pode nos posts do blog de Mitsu Furota (MS).Texto do link.

Um amigo pessoal escreveu a biblioteca Componax de código abertoTexto do linke há algumas instalações notáveis ​​lá; mas ele está no comando completo de sua pequena empresa com total controle sobre as diretrizes de código, e cada linha de código "passa por suas mãos".

Embora isso seja especulação da minha parte: eu acho / adivinho outros problemas podem entrar em jogo em uma situação de equipe de software de médio a grande reutilização de extensões.

Olhando para as diretrizes da MS emTexto do link, você encontra:

Em geral, você provavelmente estará chamando métodos de extensão com muito mais frequência do que implementando seus próprios métodos de extensão. ... Em geral, recomendamos que você implemente os métodos de extensão com parcimônia e somente quando for necessário. Sempre que possível, o código do cliente que deve estender um tipo existente deve fazer isso criando um novo tipo derivado do tipo existente. Para obter mais informações, consulte Herança (guia de programação C #). ... Quando o compilador encontra uma chamada de método, primeiro procura uma correspondência nos métodos de instância do tipo. Se nenhuma correspondência for encontrada, ele procurará por quaisquer métodos de extensão definidos para o tipo e vinculará ao primeiro método de extensão encontrado.

E no Ms'sTexto do link :

Os métodos de extensão não apresentam vulnerabilidades de segurança específicas. Eles nunca podem ser usados ​​para representar os métodos existentes em um tipo, porque todas as colisões de nomes são resolvidas em favor da instância ou do método estático definido pelo próprio tipo. Os métodos de extensão não podem acessar nenhum dado particular na classe estendida.

Fatores que parecem óbvios para mim incluem:

Eu suponho que você não iria escrever uma extensão a menos que você esperasse que ela fosse usada com muita frequência e com muita frequência. Por outro lado: você não poderia dizer o mesmo sobre a subclassificação?

Sabendo que podemos compilá-los em uma dll separada, adicionar a dll compilada e fazer referência a ela e usar as extensões: é "legal", mas isso "equilibra" o custo inerente ao compilador primeiro ter que verificar para ver se os métodos da instância forem definidos conforme descrito acima. Ou o custo, no caso de um "confronto de nomes", de usar os métodos de chamada estática para garantir que sua extensão seja invocada em vez da definição de instância?

Como o uso freqüente de extensões afetaria o desempenho em tempo de execução ou o uso da memória: Não tenho ideia.

Então, eu apreciaria seus pensamentos, ou saberia sobre como / quando você faz ou não usa extensões, em comparação com a subclasse.

obrigado, Bill

questionAnswers(4)

yourAnswerToTheQuestion