Extension Methods–Fatos e curiosidades

Um dos grandes problemas deste tipo de funcionalidade é que estes métodos são mais difíceis de serem descobertos, quando se considera o uso de Reflection por exemplo.

Considere a classe produto:

namespace Dados
{
public class Produto
{
public int Id { get; set; }
public string Descricao { get; set; }
public decimal ValorDeVenda { get; set; }
public string DescricaoAdicional { get; set; }
public string GrupoEstoque { get; set; }
public decimal Saldo { get; set; }
}
}





E que possua uma classe de método de extensão para retornar o valor do estoque:




namespace Dados
{
public static class MetodosDeExtensao
{
public static decimal RertornarValorDoEstoque(this Produto objProduto)
{
return objProduto.Saldo * objProduto.ValorDeVenda;
}
}
}





Se você usar Reflection, o método acima não será listado com um dos métodos desta classe, mesmo podendo ser usado com uma instância da mesma. Isto pode causar algum impacto se estiver considerando distribuir este tipo de dado em um Class Library,



Outros elementos Extension



Existem planos para que outros elementos das classes aceitem extensões como propriedades, eventos e operadores, embora, no momento nada de concreto tenha sido lançado ainda. Se você considerar que Extension Methods são exclusivos ao C# fica fácil imaginar os seu futuro.