C# Métodos de extensão

C# Métodos de extensão
O conceito de método de extensão é utilizado para inserir novos métodos na classe já presente no programa. Ou pode nos permitir adicionar alguns recursos de extensão sem editar o código -fonte do tipo original. Isso impede o uso da herança e torna o código complicado. Como esses métodos podem ser acessados ​​se os métodos de extensão estiverem presentes na nova classe?

A resposta a esta consulta está no uso de um parâmetro de ligação. Estes são usados ​​para vincular a classe com as funções recém -criadas. É uma variável vazia que não contém nenhum valor; apenas atua como uma palavra -chave simples. É sempre declarado em primeiro lugar na lista de parâmetros. Se estiver escrito, exceto no local inicial, o compilador relevante dará um erro. A palavra -chave usada para o objetivo de ligação é 'isso'.

# Esta amostra s;

Todos os métodos de extensão são sempre declarados como estáticos, mas uma vez que a ligação ocorreu com a classe, essas funções se tornam não estáticas.

Exemplo 1

Considere um programa nítido simples, no qual três funções são definidas. Todas essas funções contêm um console simples.Declaração WriteLine para exibir a mensagem nas telas. Esses métodos são as funções regulares, como programas simples.

# Public void M1 ()

Agora queremos adicionar extensões a este programa existente. As extensões desempenham um papel importante na adição de novas funções em sala de aula sem usar a herança. Além disso, podemos simplesmente adicionar uma nova classe sem editar a anterior. Adicionaremos dois métodos de extensão à amostra de classe. As novas funções serão declaradas em uma nova classe estática e se tornarão parte da classe de amostra existente. Este processo é conhecido como ligação. Então, uma nova classe estática é criada. Esta classe não tem vínculo com a classe existente, pois não é herdada da classe abstrata ou da classe já existente.

Dentro da aula, declaramos duas novas funções estáticas. Essas funções têm as mesmas declarações a serem exibidas. Enquanto a declaração das funções estáticas, no parâmetro, usamos a palavra -chave 'this' junto com o objeto da classe de amostra. A 'This' é um parâmetro vinculativo; Ele não contém nenhum valor, mas é usado apenas para vincular os métodos estáticos recém -criados com o existente na classe já definida. Como queremos vincular os métodos à amostra de classe, a classe e o objeto são usados ​​em argumentos para o objetivo de ligação.

# Public static void M4 (esta amostra S)

Da mesma forma, a segunda função também levará essa palavra -chave e o objeto da classe. Na lista de parâmetros, declaramos parâmetros vinculativos sempre no início.

Esta função exibirá uma instrução passada para ela através do programa principal. Uma aula para o programa principal é declarada. Dentro do programa principal, criaremos um objeto para a classe de amostra, pois vinculamos os novos métodos à classe de amostra, para que todos esses métodos sejam acessados ​​através do objeto da classe de amostra. Não há necessidade de criar um objeto para a nova classe.

# Amostra s = novo amostra ();

O objeto da classe é declarado dinamicamente. Este objeto chamará todas as funções de ambas as classes definidas separadamente.

# S.M1 ();

Vamos executar o código -fonte acima no terminal Ubuntu. Para esse fim, será necessário um compilador, por isso usamos MCs e usaremos o mono para executar o arquivo com a extensão de .exe.

Arquivo de $ mcs.cs
$ MONO FILE.exe

Exemplo 2

Neste exemplo, uma função booleana é criada para comparar dois valores e retornar se o primeiro valor é maior que o primeiro. Esta comparação é feita na classe de extensão declarada em um método de extensão. Depois de declarar as bibliotecas, usamos diretamente uma única classe na qual um método estendido é declarado.

Dentro da aula, tiramos uma função do tipo Bool. Este booleano retornará um único valor, 'verdadeiro' ou 'falso' em um momento. Se o primeiro valor for maior que 'verdadeiro' será enviado; Caso contrário, a resposta será falsa. Este parâmetro contém o parâmetro 'este' para vincular a função estendida com as variáveis ​​que enviamos a ele do programa principal. Enquanto duas variáveis ​​do tipo de dados inteiro também são declaradas aqui para armazenar os valores. A comparação entre esses dois números inteiros será feita e o valor será retornado.

Dentro do programa principal, uma variável do tipo inteiro é tomada e atribuída um valor.

# Bool z = stri.MyExtensionMethod (200);

Uma variável do tipo bool será declarada aqui para aceitar o valor retornado da função em uma chamada de função. O objeto Stri é usado para chamar a função. Isso levará um valor no parâmetro. O segundo valor é enviado a ele através do objeto ao chamar a função.

Salve o código e execute -o; Você verá que o primeiro valor foi menor que o segundo, e é por isso que a resposta é falsa.

Exemplo 3

Neste exemplo de C Sharp, usamos um método de string interno para calcular o comprimento da sequência de entrada passada em direção à função do programa principal. Uma classe estática é criada. A palavra -chave estática mostra que outra classe não pode herdá -la. Dentro desta classe estática, um método estático é declarado. Este método encontrará o comprimento total da string. Portanto, o parâmetro do método conterá uma variável de tipo de string para aceitar a sequência de entrada.

O método de comprimento é acessado através do objeto da string. Agora declare a função principal. Atribua um valor de string ao tipo de dados da string.

# Int z = stri.ExtensionMethodName ();

Esta chamada de função recuperará o comprimento e a armazenará na variável do tipo inteiro. Esse comprimento será exibido através dessa variável posteriormente com a ajuda do método WriteLine ().

Compilar o código e executá -lo. Você verá que uma sequência de 10 caracteres foi usada no programa.

Conclusão

Um método de extensão em C Sharp é usado para adicionar alguma funcionalidade extra ao programa sem modificar o código existente uma vez escrito. Isso pode ser feito usando uma classe extra com métodos estendidos. No entanto, esses métodos fazem parte de outra classe, mas podem ser vinculados e acessados ​​a partir do objeto da classe já criada. Usamos alguns exemplos básicos que explicaram a criação e o trabalho dos métodos estendidos. A palavra -chave 'This' desempenha um papel importante nos métodos de extensão de ligação com a classe. Usamos essa palavra -chave no parâmetro da função estendida.