Compartilhar via


Como: Implementar e telefonar um método de extensão personalizada (guia de programação translation from VPE for Csharp)

Este tópico mostra como implementar seus próprios métodos de extensão para qualquer tipo no Biblioteca de classes do .NET Framework, ou qualquer Outros tipo .NET que você deseja estender. Código do cliente pode usar os métodos de extensão, adicionando uma referência para a DLL que os contém e adicionando um usando o diretiva que especifica o namespace em que os métodos de extensão estão definidos.

Para definir e telefonar o método de extensão

  1. Definir um estático classe para conter o método de extensão.

    A classe deve estar visível para o código do cliente.Para obter mais informações sobre regras de acessibilidade, consulte Modificadores de acesso (guia de programação C#).

  2. Implementar o método de extensão sistema autônomo um método estático com pelo menos a mesma visibilidade da classe que contém.

  3. O primeiro parâmetro do método Especifica o tipo que o método opera em; deve ser precedido com o Issomodificador de .

  4. No código de chamada, adicionar um using diretiva para especificar o namespace que contém a classe do método de extensão.

  5. telefonar sistema autônomo métodos sistema autônomo se fossem métodos de instância no tipo.

    Observe que o primeiro parâmetro não for especificado, chamando código porque representa o tipo em que o operador está sendo aplicado e o compilador já sabe o tipo de seu objeto.Você só precisa fornecer argumentos para parâmetros 2 por meio de n.

Exemplo

O exemplo a seguir implementa um método de extensão chamado WordCount no MyExtensions.StringExtension classe. O método opera sobre o String classe, que é especificado sistema autônomo o primeiro parâmetro do método. The MyExtensions espaço para nome é importado para o espaço para nome do aplicativo e o método é chamado dentro de Main método.

using System.Linq;
using System.Text;
using System;

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;
        }
    }
}
namespace Extension_Methods_Simple
{
    //Import the extension method namespace.
    using CustomExtensions;
    class Program
    {
        static void Main(string[] args)
        {
            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 {0}", i);
        }
    }
}

Compilando o código

Para executar esse código, copie e cole-o em um projeto de aplicativo console Visual translation from VPE for Csharp que tenha sido criado no Visual Studio. Por padrão, esse projeto destinos versão 3.5 do .NET Framework, e ele tem uma referência a sistema.Core.dll e um using diretiva para sistema.LINQ. Se um ou mais desses requisitos estão faltando o projeto, você pode adicioná-los manualmente.Para obter mais informações, consulte Como: Criar um projeto LINQ.

Segurança

Métodos de extensão não apresentam nenhuma vulnerabilidades de segurança específicos.Eles nunca podem ser usados para representar os métodos existentes em um tipo porque todos os conflitos de nome serão resolvidos a favor da instância ou definido pelo próprio tipo de método estático.Métodos de extensão não podem acessar qualquer dados particulares na classe estendida.

Consulte também

Conceitos

Guia de Programação C#

Referência

Métodos de extensão (guia de programação translation from VPE for Csharp)

Classes estáticas e membros de classe estáticos (guia de programação C#)

(referência C#) protegida

(referência C#) interno

public (referência C#) 

Este (translation from VPE for Csharp Reference)

namespace (translation from VPE for Csharp Reference)

Outros recursos

Language-Integrated Query (LINQ)