Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 20054|Resposta: 0

[Fonte] Entenda rapidamente C# Conceitos Avançados (1) Delegação de delegados

[Copiar link]
Publicado em 19/01/2017 15:18:00 | | | |
Tenho feito desenvolvimento em .NET há muito tempo e recentemente resenhei o livro "C# Advanced Programming". Percebi que muitos problemas que antes parecia entender, mas não compreendia, na verdade podem ser estudados e compreendidos aos poucos.

Então, pretendo começar a escrever um post no blog sobre a "Série de Programação Avançada em C#". Ele se baseará no conceito do livro "C# Advanced Programming" e também fará referência aos posts de blog de outros especialistas, espero que você entenda. Se houver algo errado, por favor, corrija.

(Além disso: Este post no blog não explicará o básico de definições e gramática.) )



Vamos falar sobre comissionamento.

Delegate é amplamente usado no .NET. Expressões lambda, eventos, métodos de anonimato, etc., estarão envolvidos (fique ligado para posts futuros no blog).

Então, o que é entrustment?

Em termos leigos, delegados não são diferentes de especificar métodos, exceto que devem especificar a palavra-chave delegado e não possuem entidade de método. Você pode pensar nisso como um marcador de lugar, por exemplo, quando escreve código sem saber com o que vai lidar. Você só precisa saber qual é o tipo de parâmetro e o tipo de saída que vai introduzir e defini-los. Esse é o método transmitido no livro de que a assinatura deve significar o mesmo.

Vamos definir uma delegação básica:





Resultados da execução:
Você vê o lugar prático acima para confiar? Ou seja,Um delegado pode executar qualquer método com o mesmo tipo de parâmetro de ingestão e tipo de retorno, ou até mesmo uma fila de método com a mesma assinatura.

Então, nossas assinaturas de método (ou seja, parâmetros de importação e saída) realmente precisam ser exatamente iguais às do delegado? Resposta: Não, não podemos ignorar a covariância e a variação inversa.
Vamos apresentar brevemente o conhecimento sobre covariante e inversor.

"Covariância" significa ser capaz de usar um tipo mais derivado do que o tipo derivado originalmente especificado.
"Inversor" refere-se à capacidade de usar um tipo com menor grau de derivação.
Então, nossa comissão também está sujeita a covariância e inverso.

Isso significa que, se um delegado for definido, não apenas o mesmo método de assinatura pode atribuir valor à variável delegada.
Se a tabela de parâmetros de um método corresponder à declaração do delegado, mas retorna uma classe derivada de (a declaração do delegado retorna o tipo), então o método também pode ser atribuído a essa variável do delegado.
Se o tipo de retorno de um método corresponder à declaração do delegado, mas o argumento for a classe ancestral do tipo de parâmetro de declaração do delegado, então o método também pode ser atribuído à variável delegada.
Se os parâmetros e o tipo de retorno de um método corresponderem às suposições nas duas linhas acima, então o método também pode ser atribuído à variável delegada.

A seguir está um exemplo simples de covariante vs. inversor:

Covariância:

Inversor:







Anterior:Design MFC
Próximo:Como descobrir qual PID de processo um arquivo está ocupado
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com