Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Este artigo mostra como implementar seus próprios métodos de extensão para qualquer tipo .NET. O código do cliente pode usar seus métodos de extensão. Os projetos cliente devem fazer referência ao assembly que os contém. Os projetos cliente devem adicionar uma diretiva using que especifica o namespace no qual os métodos de extensão são definidos.
Para definir e chamar o método de extensão:
- Defina uma classe estática para conter o método de extensão. A classe não pode ser aninhada dentro de outro tipo e deve ser visível para o código do cliente. Para obter mais informações sobre regras de acessibilidade, consulte Modificadores de acesso.
- Implemente o método de extensão como um método estático com pelo menos a mesma visibilidade que a classe que contém.
- O primeiro parâmetro do método especifica o tipo em que o método opera; deve ser precedido deste modificador.
- No código de chamada, adicione uma
usingdiretiva para especificar o namespace que contém a classe do método extension. - Chame os métodos como métodos de instância no tipo.
Nota
O primeiro parâmetro não é especificado pelo código de chamada porque representa o tipo no qual o operador está sendo aplicado, e o compilador já sabe o tipo do seu objeto. Você só precisa fornecer argumentos para os parâmetros 2 a n.
O exemplo a seguir implementa um método de extensão nomeado WordCount na CustomExtensions.StringExtension classe. O método opera na String classe, que é especificada como o primeiro parâmetro do método. O CustomExtensions namespace é importado para o namespace do aplicativo e o método é chamado dentro do Main método.
using CustomExtensions;
string s = "The quick brown fox jumped over the lazy dog.";
// Call the method as if it were an
// instance method on the type. Note that the first
// parameter is not specified by the calling code.
int i = s.WordCount();
System.Console.WriteLine($"Word count of s is {i}");
namespace CustomExtensions
{
// Extension methods must be defined in a static class.
public static class StringExtension
{
// This is the extension method.
// The first parameter takes the "this" modifier
// and specifies the type for which the method is defined.
public static int WordCount(this string str)
{
return str.Split(new char[] {' ', '.','?'}, StringSplitOptions.RemoveEmptyEntries).Length;
}
}
}
A resolução de sobrecarga prefere instância ou método estático definido pelo próprio tipo a métodos de extensão. Os métodos de extensão não podem acessar nenhum dado privado na classe estendida.