Aprenda e entenda delegados de C# codificando | Sandor Maraczy | Skillshare

Velocidade de reprodução


  • 0.5x
  • 1x (Normal)
  • 1.25x
  • 1.5x
  • 2x

Aprenda e entenda delegados de C# codificando

teacher avatar Sandor Maraczy, Microsoft Certified Software Developer

Assista a este curso e milhares de outros

Tenha acesso ilimitado a todos os cursos
Oferecidos por líderes do setor e profissionais do mercado
Os temas incluem ilustração, design, fotografia e muito mais

Assista a este curso e milhares de outros

Tenha acesso ilimitado a todos os cursos
Oferecidos por líderes do setor e profissionais do mercado
Os temas incluem ilustração, design, fotografia e muito mais

Aulas neste curso

9 aulas (55 min)
    • 1. O que é este curso?

      1:35
    • 2. O que é um delegado?

      4:12
    • 3. Criar um delegado personalizado no código

      5:12
    • 4. A duplicação de código está crescendo - um exemplo sem usar delegados

      8:19
    • 5. Código de Refactor para usar delegado

      5:20
    • 6. Como adicionar vários delegados à lista de invocação

      7:34
    • 7. Inferência de delegado

      5:08
    • 8. Ação e ação de T

      8:50
    • 9. Func de T, resultado

      8:35
  • --
  • Nível iniciante
  • Nível intermediário
  • Nível avançado
  • Todos os níveis

Gerado pela comunidade

O nível é determinado pela opinião da maioria dos estudantes que avaliaram este curso. Mostramos a recomendação do professor até que sejam coletadas as respostas de pelo menos 5 estudantes.

47

Estudantes

--

Sobre este curso

Entenda o propósito de usar delegados e veja o quão poderosos podem ser através de exemplos.

Os delegados são muito úteis no C#, mas o conceito por trás de delegados pode ser difícil de entender completamente, portanto, pode ser confuso para muitos desenvolvedores em C#.

Vou ser seu guia através do seu caminho de aprendizado de delegados, e tornar mais simples para você entender através de meus exemplos logicamente construídos.

Se você gosta do meu curso, sinta-se livre para deixar um comentário e me diga o que você gostaria de aprender a seguir!

Conheça seu professor

Teacher Profile Image

Sandor Maraczy

Microsoft Certified Software Developer

Professor

Sandor Maraczy is a Microsoft Certified Software Developer. He became passionate about programming and automation in the beginning of college, where he studied Business Information Technology.

He first started to deal with programming in Java and C#, and he always felt, that he is interested in coding in more depth, so beside college he also improved himself at home. He found really good resources online, by a guy called John Sonmez, who inspired him. He learned to code step by step by actually doing it, so he could soon break into the field as a software developer.

He also helped a lot to hiss classmates at college, where he got a lot of compliments for the way he explains basic programming concepts.

Today he is also teaching online, because he believes, that throu... Visualizar o perfil completo

Habilidades relacionadas

Tecnologia Desenvolvimento web

Nota do curso

As expectativas foram atingidas?
    Superou!
  • 0%
  • Sim
  • 0%
  • Um pouco
  • 0%
  • Não
  • 0%
Arquivo de avaliações

Em outubro de 2018, atualizamos nosso sistema de avaliações para melhorar a forma como coletamos feedback. Abaixo estão as avaliações escritas antes dessa atualização.

Por que fazer parte da Skillshare?

Faça cursos premiados Skillshare Original

Cada curso possui cursos curtas e projetos práticos

Sua assinatura apoia os professores da Skillshare

Aprenda em qualquer lugar

Faça cursos em qualquer lugar com o aplicativo da Skillshare. Assista no avião, no metrô ou em qualquer lugar que funcione melhor para você, por streaming ou download.

Transcrições

1. O que é este curso?: Olá aí. Comutado o aprender e entender C afiado delegados por curso de codificação. Meu nome é Chandler Moralidade. Agora você mostra o que você aprende no meu curso. Por que você deve aprender delegados C afiado. Delegate é uma parte extremamente importante fora do framework darknet e eles são comumente usados estes após um desenvolvimento, às vezes pode ser a solução mais fácil para seus problemas. Você só precisa reconhecer o cenário quando usá-lo aprendendo delegados, você será capaz de escrever código mais poderoso que permitirá uma melhor reutilização de código seu software. Ele os usará para eventos que só esclarecerei no futuro. Seções fora do discurso e você vai usá-los também indiretamente Van, por exemplo, criando glink você consultas ou operando com quadro que são baseados na formação de expressões lambda . No final das pontuações, você saberá o que é um delegado sobre aqueles sobre o conceito por trás dele. Você será capaz de criar e usar delegados e também entender o propósito quando os delegados podem ser úteis, que eu vou demonstrar através de meus exemplos logicamente maiores e úteis. Você verá como os delegados podem ajudá-lo a evitar a chamada duplicação em seu software e também como não violar o princípio bruto aberto. E no final, vou esclarecer o que é uma invocação uma lista. E o Tom. Vários delegados podem ser adicionados a ele. Então vamos direto para ele e programar comigo para me tornar um mestre delegado. 2. O que é um delegado?: delegados em C Sharp é um conceito muito difícil de entender e pode ser confuso para um monte de desenvolvedores C afiado. Essa é a razão pela qual eu escolhi este tópico para dar uma conexão de briefing fora que é saltar direto para o tópico. Presumo que você é sua família são inicialização variável em C afiado. Mas vamos voltar para você só por alguns segundos. Nos primeiros 2 exemplos, temos de valor para agir variáveis X, e é terminado eixos fora do tipo int e estamos atribuindo seis para comer como um valor. Acabou está desligado, Taibu e estamos simplesmente atribuindo força a ele. Inserir caixa. Temos uma variável de mergulho de referência chamada O off type object, e neste caso, estamos criando uma nova instância fora do tipo de objeto, e podemos fazer referência a esse objeto através do nosso overable no heap. Mas o que acontece se você não quiser manter quaisquer valores ou objetos referenciados, mas queremos fazer referência a métodos, e isso vai nos levar ao conceito de portões Terra porque o que é um delegado? Basicamente, um delegado é um tipo em C afiado, e eu demonstraria isso com um programa chamado I Spy. Esta é uma maneira fácil, como você foi capaz de desmontar o código de volta para a linguagem intermediária ou de volta para C Sharp . E depois de construir o projeto simples, abri os binários em I Spy e obtive a seguinte saída, como você pode ver no slide. Então, no primeiro caso em nosso código C afiado, podemos ver que nossa declaração de delegado é apenas uma linha. Mas no segundo caso, se eu ir em frente e falar isso muito doente para linguagem intermediária, podemos ver que uma aula é gerada para nós nos bastidores. E esta classe estende mais delegado dycus, e essa é a classe base aqui. Vamos ver o que, como pode ser um delegado delegado, é na verdade um ponteiro de função, e isso significa que somos capazes de fazer referência a métodos através do nosso delegado. Somos capazes de fazer referência à função caseira do matador quente, e também somos capazes de referenciar as múltiplas funções ou grupo de funções também. Nós também podemos pensar em um delegado como um pipeline, muito pode simplesmente despejar nossos dados e podemos obtê-lo do ponto A ao ponto B, e é muito importante mencionar que esses pontos podem ser um ponto totalmente diferente nossa aplicação. Agora vamos ver como delegados personalizados funcionam neste exemplo simples. Temos dois métodos estáticos. Todos eles retornam void e todos eles tomam parâmetro string aqui. No primeiro caso, temos o método de bloqueio para console, que simplesmente escreve a mensagem para fora do console no método bloqueado, bloqueado fogo estavam registrando a string para o seu arquivo. Podemos envolver esses métodos um após o outro sem usar delegados muito simplesmente com mesma entrada ou mesmo diferente. Mas podemos invocar um ou ambos através de um delegado, e para isso precisamos da seguinte declaração de delegado. Então esta é uma declaração de delegado, e como você pode ver, parece uma declaração de método. É muito simples. Precisamos usar uma palavra-chave delegado aqui. Temos evitar o tempo de retorno, porque gostaríamos de usar o bloqueio para console ou o bloqueio para disparar métodos anos e eles roid orator. Em seguida, vem o nome fora do delegado, que será o meu delegado mais longo neste caso, e então precisamos escrever os parâmetros D Atribuído métodos valores fora do curso. Precisamos de uma criação de instância também, o que significa que precisamos criar uma nova instância fora desse tipo de delegado. Estamos dizendo, meu delegado mais longo, meu delegado é igual a novo, meu delegado mais longo e entre parênteses precisamos escrever um método, e esse método será o método que estamos referindo, também. Então, onde minha variável delegado e nós podemos invocar sua muito facilmente como mencionado através da nossa minha variável delegado ignorando Olá Vered A entrada string. Nós somos capazes de chamar o bloqueio para o método console aqui e este programa simples. Nós escrevemos uma única linha no console que diz, Olá palavra e é isso. É tão fácil definir um delegado personalizado. Agora vamos ver como ele funciona em código. 3. Criar um delegado personalizado no código: Agora vamos ver como definir código de delegação acostumado. Neste exemplo simples, temos dois métodos estáticos, alguns sobre os métodos assunto aqui. Ambos tomam dois ins como parâmetro, e retornam e entram no resultado do cálculo. Claro, ele não se surpreenderá se os chamarmos diretamente com, por exemplo, cinco e cinco parâmetros. Teremos 10 chamando alguns, e obteremos zero por Corning, sujeito como resultado. Então vamos tentar soar só para fazer esta costa. Então, quero dizer, primeiro, chamar alguma erva mencionada cinco e cinco parâmetros e no Saab, enganado em cinco parâmetros aqui. E uma vez que esses métodos retornam em inteiro abaixo para escrever console linha direita porque ele gostaria de ver o resultado de saída no console. Então está certo porque toda essa terra direita aqui muito rápido, e agora nós disparamos sobre isso, nós podemos ver que nós temos 10 e zero como deles apenas ser esperado. Mas o que acontece se eu não quiser chamar esses métodos diretamente? Mas eu quero usar um delegado para o método porque isso também é muito fácil de fazer, e aconteceu da mesma maneira que vimos anteriormente no slide. Primeiro precisamos delegar a declaração dos anos quarenta. Então eu vou fazer esta declaração primeiro aqui neste arquivo e também aqui no espaço do nome, para que outras classes possam usá-lo também. Talvez mais tarde. E eu realmente faço isso aqui e escreve em público. Precisamos usar o que uma palavra-chave portal e cenas. Esses métodos retornam, e precisamos escrever um fim, bem como o tipo de retorno. Em seguida, precisamos escrever delegados nome que será números processo delegado neste caso e, em seguida, os parâmetros Aqui o uso de métodos de referência. Então os métodos de referência são este alguns e o sul diretamente quer usar para delegação e eles tomam dois inteiros como um parâmetro. Então precisamos escrever. Eu não agradeci no reboque. Eu também ouço. Então temos nossa declaração de delegado agora, mas para usarmos isso, também precisamos que ela comeu esse tipo de delegado assim como está no slide. Deixe-me primeiro livrar-me desta invocação directa. Então eu iria excluir isso e eu enxaguei, iniciar novo objeto fora deste tipo sua instância Aqui eu tenho você chamado de Variável del e vamos fazer esta sequência para novos números processo, delegar. E agora você pode ver que isso realmente leva um método como o alvo. E este método precisa ter que inserir parâmetros e precisa retornar e como os resultados. Uma vez que temos dois desses métodos, podemos usar algum ou o sofrimento. Mas vamos tentar isso para nós com alguns. Então eu escrevo alguns aqui e você pode ver que ele cumpre perfeitamente invocá-lo. Nós precisamos. Ele era o nosso testamento de entrega, e nós vamos em frente e envolvidos. É variável. Apenas a vida. Ele invocava um método e passava o evento cinco, como tínhamos feito antes. Claro, precisamos escrever para o cônsul também, assim como escrevemos antes. E agora um incêndio nisto. Teremos 10 também, como já fizemos antes. Porque, na verdade, o que precisamos aqui é que nós criamos em você delegar aqui, e a instância criou este delegado e através de Dezell Variable, fomos capazes de apontar para isso alguma mensagem aqui. Então, invocando eles vão e passando em cinco e cinco parâmetros apontando para este método, nós poderíamos simplesmente e caminhá-lo. E nós também somos capazes de mudar isso, para subtrair se você quiser, modificando rapidamente alguns para subtrair aqui. E agora se eu executar isso bem, você e você sabe, como resultado, eu notei que quando eu estava mudando alguns para subtrair aqui, eu não estava tocando nesta invocação aqui. Então eu fui capaz de fazer isso sem modificar a invocação. Vit os cinco e cinco parâmetros. E isso não é realmente útil ainda porque você pode fazer a pergunta: por que não é suficiente para nós chamar esses métodos aqui diretamente? Por que precisamos criar delegate aqui e grande nova instância e invocá-lo através desta variável? E é isso que vamos cobrir a seguir. 4. A duplicação de código está crescendo - um exemplo sem usar delegados: E agora vamos ver como podemos fazer uso real do delegado. Imaginemos que temos novos requisitos em vez de apenas caminhar esses métodos através de um delegado e orar o resultado do conselho. Agora queremos ser capazes de olhar os números, o nome desligado, o método que estamos usando para o nosso cálculo e os resultados do cálculo para um arquivo. E também queremos que isso funcione para nossas funções futuras. Isso significa que se eu quiser adicionar a função que multiplica ou divide meus números, eu também preciso ser capaz de fazer isso de forma muito simples. Então vamos ver como funciona. Primeiro, chamarei isso sem usar o delegado. Então eu muito fábrica para usar o delegado para ver o quão flexível nosso código pode ser. Então vamos começar isso criando uma classe para nossa função. Porque esses métodos são métodos relacionados ao cálculo. Precisamos encapsular a disfuncionalidade aqui. Então vamos criar minha classe de calculadora. Vou adicionar um copo novo. Vamos chamar isso de minha calculadora aqui e nesta aula. Eu gostaria de baste meus métodos de cálculo relacionados a partir do programa principal, então eu realmente rapidamente saltar aqui e basear esses métodos. E eu também vou me livrar da palavra-chave de estudo aqui. Isso significa que, a fim de que ele era esses métodos. Agora precisamos criar um novo objeto fora desse tipo e no programa principal. Também temos aqui o nosso delegado que decoramos aqui neste arquivo. Primeiro, também criaremos um novo cinco para ele. Então, menos caixa, novos deuses de classe números Croesus delegados aqui, e a classe é gerada para nós automaticamente aqui. Mas precisamos nos livrar disso porque não precisamos de uma aula aqui. Nenhuma base aérea, este Doug uma declaração para este arquivo. Então vamos ver como funciona. Então, como mencionado, precisamos registrar os números, o nome do método e o motivo toe arquivo. Então eu vou mudar isso para não retornar X mais y, mas eu vou fazer nova variável off tipo. E o meu real modificado é que eu era alguns Estes dois inteiros e armazenar a variável de resultados . Agora eu preciso declarar o nome do método. Eu escrevo psiquiatra com o nome e é booby, alguns muito simples e agora um passeio com texto. Então é isso mesmo. Texto de saída de string é igual a string formatada aqui. Então eu escrevo String nesse formato. Isso é certo. Os números uh zero um nome de método é e fazer Resultado é três Agora eu preciso montar as variáveis aqui Então eu escrevo X e y parece que estes são os números que eu montar o nome do método que pode ser o nome do método e, em seguida, eu montar o resultado Agora, a fim de olhar este para cinco você está arquivo certo aqui Precisamos usar tese Tamayo espaço nome aqui e estamos usados o upend ou métodos de texto aqui qualquer o passado Primeiro no ônibus será Oh minha unidade c nos resultados para Inter Então eu vou lidar rapidamente com isso a partir daqui e agora nós escrever o caminho aqui quando eu acabei copiar e vamos criar um novo cinco para ele O nome fora razão que txt E você também precisa escrever o conteúdo aqui que realmente são texto de saída e agora é o passo certo eu simplesmente retornar o resultado aqui, a fim de usar este idéia rapidamente envolveu este método Aqui estou certo Meu geek calculadora carro foi novo Minha calculadora uma vez que estes métodos são Inna encapsulado neste tipo aqui. Precisamos criar uma nova instância para usá-los. Tudo bem, Deus, Deus, que alguns para mim o mesmo bar pode 3ª vista mais cedo. E já que estes métodos regressam e estão certos, armas? Tudo bem, fila de novo aqui. Agora, se eu fizer isso com você e conseguir 10 como já fizemos antes. Mas também temos um arquivo de texto aqui. Se eu abrir a luta fiscal, eu posso ver o resultado da minha saída. O número é o nome do método e o resultado também. O que acontece se eu quiser usar isso para o método assunto também? Não apenas para dois, algum método. Para fazer isso, precisamos voltar para minha aula de calculadora muito rápido. E precisamos duplicar essa funcionalidade para ter um assunto minces Desde que esses arquivos upend todo o método de texto simplesmente escreve as cordas da maçã sem espaços em branco ou sem qualquer nova linha. Ivy rapidamente modificou isso aqui para corda que conquistou morrer com texto e fazer uma nova linha depois disso. Então agora vamos em frente e criar nosso assunto. Metal Justice mencionou cópia de mergulho colar isso e vamos chamar isso de subtrair aqui e aqui também. E há mais uma modificação. Precisamos tirar isso em vez de resumir Exxon Vie vista Agora diga X menos y aqui e agora se eu usar isso tudo certo, vai um pênis de leão direito que subtrair cinco e cinco. E correndo eu obteria 10 e zero antes da justiça agora, se eu ver minhas árvores Alberto que você pode ver que na primeira linha nós temos números cinco e cinco, alguns com o resultado fora 10 de cinco e cinco, os mesmos parâmetros. E subtraindo-os, obtemos zero como resultado. Mas o problema estava nisso? E o problema é que toda vez que queremos criar algo funcional novo na minha classe calculadora aqui, precisamos duplicar isso. Por exemplo, se você quiser outra mensagem, eu quero jogar, precisamos mudar isso para multiplicar. Precisamos fazer outra modificação aqui e Israel para dizer x tempo. Ouvi dizer que estamos a fazer crescer a minha aula de calculadora. Esta é uma prática muito ruim, porque temos muitas duplicações fora do tribunal e também violamos o princípio do fechamento aberto. O princípio de fechamento aberto afirma que uma classe deve ser aberta para extensões, mas fechar para modificações. Esta classe não será fechada para modificações porque precisamos ir em frente e modificar a classe o tempo todo aqui. Então vamos seu fator isso para usar delegados em vez disso. 5. Código de Refactor para usar delegado: E agora vamos considerar a escola para evitar a duplicação do núcleo. Aqui. Assim como algum método. Aqui agora tem dois parâmetros X e y e estamos difíceis de codificar este X mais y aqui e estes X menos menos método abstrato e assim por diante e assim por diante. E queremos evitar isso e é para isso que vamos usar o delegado. Então, em vez de fazer isso, teremos outro perímetro aqui e este parâmetro de você estará fora do portão Abdullah. Este será o nosso representante de processo de números que criamos anteriormente e vamos chamar isso de del. Então nós queremos duro chamado este X mais y aqui materiais dizer Del X e y, em seguida, que vai fazer o nosso resultado aqui e vamos dizer em vez de difícil codificação a alguns através da nossa variável del. Temos uma propriedade chamada Método off type info método e sapato que somos capazes de armazenar o nome através da propriedade name aqui. Então, nós também temos o nosso nome método agora, Então vamos ver como podemos usar isso se você vai programa método que CS você pode ver que este código não vai compilar porque agora estamos chamando o algum método com dois parâmetros. Mas a matéria sonora agora tem um certo paramilitarismo. Então precisamos ir em frente e dar-lhe um objeto. Delegados de processo de números de tipo desativado. Então vamos fazer um novo objeto aqui e precisamos passar no método V foi antes. Mas como não temos um método, eu só quero ir em frente e digitar alguns aqui e pressionando controle e ponto, podemos gerar um novo método aqui e este método será criado automaticamente para nós. Você só se livra desse lance nada plantado exceção. E neste método, podemos ir em frente e retornar o Sam off X e Y. Agora, se eu executar isso, você pode ver que temos a mesma saída que temos obtido antes. Se eu for para o resultado que txt há também a mesma saída que já vimos antes. Os números são cinco e cinco. O nome do método é alguns e o resultado é feito Então, basicamente, não precisamos de código rígido são funcionalidade na minha classe calculadora em qualquer off esses métodos, podemos chamá-los através do delegado então, na verdade, se eu quiser estender meu função direita. Esses veterinários subtraem ou multiplicam ou quaisquer outros métodos que levam dois inteiros e retornam Annan. Eu não preciso mais duplicar este tribunal aqui e estender este arquivo. Eu posso excluir isso agora, e eu posso simplesmente usar este método aqui com alguns importou o que vamos modificar agora para processar números aqui porque este método não só retorna o resultado fora do cálculo, Então nós não estamos apenas calculando, mas também olhando o fora de taxou seu arquivo. Isso seria um pouco mais conciso se eu usasse uma classe mais longa para tornar essa funcionalidade de log aqui apenas para torná-la simples. Acredito que esteja aqui por enquanto. Então, agora gostaríamos de estender nossa funcionalidade com outros cálculos. Podemos simplesmente voltar para o programa que CS e chamou os números de processo em outro delegado. Então eu sou um rápido ir em frente e escrever tipo que processar números. Eu realmente passo para cinco e cinco, e eu vou passar em um novo objeto fora deste tipo de delegado, e eu vou passar em mergulhador passagem não vai se aplicar desta vez, então no momento nós não temos este assunto, mas eu rapidamente gerei, assim como vimos antes. E agora podemos voltar da próxima vez. Então eu ouvi. Então, se eu executar este programa, vamos ver que nós temos 10 e 25 agora como o resultado e em nossos resultados de saída Txt você também obter cinco e cinco e 25 quando estamos chamando Multiply aqui. Então agora podemos ir em frente e escrever a divisão ou o método trilha sonora diz, Bem, assim como o método alguns e multiplicar. E nós poderíamos escrevê-lo sem tocar neste meu processo de calculadora, função de número para que possamos estender nossa funcionalidade fora deste Minha calculadora Turkle nós por não escrever e duplicar tribunal aqui na classe, mas no lugar fora invocação. Podemos escrever nossos métodos de cálculo, e isso é o que torna nosso chamado muito flexível. 6. Como adicionar vários delegados à lista de invocação: Agora, vamos ver como podemos adicionar vários delegados à nossa lista de invocações. Tenho meu projeto de demonstração do delegado aberto se você estiver trabalhando antes. E eu estendi meu programa de vidro com dois métodos estáticos aqui. Um é chamado Rights Impulse String em, direita. Simplesmente D log mensagem fora do console de uma maneira simples. E o outro é chamado de História de Plantas Brilhantes aqui e subir a corda na fantasia Espere até o conselho. Agora nós os envolvemos através do delegado para esta pequena demonstração. Eu apenas comentar é chamado para fora O que nós escrevemos antes ter um controle de imprensa mais k e ver aqui a discórdia comum. Eu escrevo bomba desolar o vazio do portal. Lembro-me desta cerveja delegados já que vamos usar isso para registro e ele terá permissão de bomba ou a mensagem de registro de cordas aqui agora para você. Foi dinheiro para estender isso fora do curso? Simples. Unger é igual a você tranca ou delega aqui. Uma pessoa de unhas, certo? Símbolos bebem agora eu vou copiar colar isso muito rápido e deixe-me mudar isso para fantasia. Eu vou aqui e cada pessoa é a corda chique certa aqui. Como você se lembra, precisamos invocar variáveis Tous aqui. Mas por enquanto nós realmente envolvemos essas variáveis com o mesmo parâmetro de entrada de string. Então você direita corda mensagem lug é igual a nós estamos ansiando para console fazer o consórcio Ok, Agora, em seguida, andou diarréia simplesmente para a direita parecem mais passar mensagem pulmonar. E eu vou fazer isso com minha fantasia por mais tempo também aqui. Então, agora, se eu executar este programa, vamos começar Estamos olhando para o console escrito duas vezes, mas primeiro de uma forma simples e, em seguida, de uma maneira chique aqui. E como você pode ver, nós criamos duas instâncias fora deste tipo de delegado e através do simples mais longo estavam apontando para a seqüência simples direita através de nossa fantasia mais longo Estamos apontando para o método de histórico Vance certo Mas como podemos invocar vários métodos através de apenas um delegado, adicionando os delegados à lista de invocação? E isso vai ser muito fácil de fazer e quatro dias reais simplesmente se livrar da nossa invocação aqui e também do luxo extravagante criado aqui e agora temos apenas uma delegação de permanência ela ation. Então eu vou chamar isso mais delegado ou lager Del, por causa de você tem apenas uma variável aqui e agora, dizendo mais Del Plus é bem capaz de adicionar novo delegado à nossa lista de invocação. Eu escrevo novo por mais tempo, delegado e agora você está passando minha corda chique direita aqui. E, claro, isso não fará nada. Uma vez que não invocamos esta cerveja, eles vão variar tão menos fraco andar. Era uma mensagem longa e longa e agora disparamos sobre isso. Vamos tirar o mesmo que conseguimos antes. Então agora o que aconteceu é que só temos uma cerveja. Eles vão inicialização aqui estamos apontando simples a cadeia de entrada direitos, mas fomos capazes adicionar um novo delegado que aponta o método string fantasia direito. Então, através deste laggard l variáveis através desta variável estávamos caminhando estes métodos um após o outro aqui. E se eu quiser invocar outro método, eu simplesmente ir em frente e escrever mais tempo. Del plus é igual a novo delegado mais tempo e eu também posso ir em frente e escrever algo tolo aqui , como string direita, ler, perguntar os riscos simplesmente eu iria gerar esses métodos aqui e agora. Eu escrevo o formato de string zero e nossa mensagem de log, e nós ainda temos apenas esta invocação variável aqui Este local delegando. Então deixe-me fazer isso muito rápido. Agora tenho três métodos. Escola através deste fundo Invocação aqui. Então esse é o conceito básico por trás da invocação. Honesto aqui. Mas deixe-me também mostrar-lhe como podemos excluir um delegado ou em assinar, Assinar e cancelar assinatura será importante. Pior quando falamos de eventos mais tarde. Então, responder, escriba ou excluir um delegado é muito fácil. Em vez disso, off plus é igual vamos simplesmente usar menos igual aqui seguro. Foi sequelas menores para a corda de arroz com o método Asterix Nossa saída será o 1º 2 métodos porque há também uma coisa mais importante que eu não mostrei antes, mas tenho certeza que você vai saber como isso funciona Se eu ir em frente e em vez de explosões igual a, Eu só digo igual a nova cerveja Delegado luta Francis String e eu mudaria isso para explosão igual ao que será a nossa saída. Então deixe-me fazer isso muito rápido aqui. E como você pode ver, nós não estamos escrevendo a corda simplesmente fora do console. Estamos apenas escrevendo a string extravagante e a string com asteriscos aqui porque, na verdade, estamos criando uma nova instância fora deste tipo de delegado blogger e estamos apontando para a string de símbolo direita no momento. Mas na próxima linha estavam dizendo que esta cerveja eles vão variável é igual a um novo delegado mais longo Andrea apontou de corda chique direito aqui. Então você não está mais apontar para o método de fluxo simples certo, mas para o método histórico da França certo e, em seguida, apontando para este método na próxima linha, nós também estamos adicionando este delegado a lista de invocação. Então, esses dois métodos aqui corda fantasia direita e corda direita com Asterix sentir estar envolvido . 7. Inferência de delegado: nesta palestra, vou apresentar o seu conceito, que às vezes pode ser confuso para iniciantes, desenvolvedores C afiada. E esse conceito é chamado de inferência de delegado. Inferência delegado é simplesmente uma grande característica que o compilador C afiado nos fornece e vamos nos economizar um pouco fora do tribunal aqui. Então, em nosso exemplo de delegado multicast, o que tínhamos anteriormente criamos um delegado chamado mais longo delegado aqui. E não há lembrar que podemos atribuir métodos para este delegado que retornar void e leva parâmetro string. Mas antes estávamos atribuindo vários delegados, a lista de invocação o primeiro grande a nova instância fora deste tipo mais delegado ouro lager del, nós escrevemos novo delegado mais longo e estávamos apontando para o método string simples certo. Então estávamos dizendo laggard l mais igual e novamente precisamos t. instância ela comeu novo delegado laggard, que estavam apontando para outro método aqui. Bem, neste caso não é tão complexo quando estamos olhando para este exemplo. Mas se você voltar para a minha inicialização calculadora aqui nós chamamos este método de números de processo e no parâmetro de pesquisa, precisamos criar uma nova instância fora deste tipo de delegado e, em seguida, apontando para o algum método. E neste ponto, o mesmo imposto tornou-se um pouco mais estranho, porque podemos como a pergunta de porque precisamos de grande nova instância fora deste tipo de delegado. Uma vez que sabemos exatamente que esta função de números de processo terá números delegador processo . Mas como queremos nos expressar por que, acordo com o mais fácil e simples possível, o compilador C Sharp nos fornece esse grande recurso chamado Delegate in France. Então, se você olhar para este exemplo mais uma vez, eu faço uma nova instância fora deste tipo de delegado mais longo e tipo de delegado na França torna possível que eu não precise mais montar isso aqui, já que o tipo será inferido e isso significa que o compilador C sharp irá descobrir isso . Mas este tipo é e vai criar uma nova instância fora dele nos bastidores para nós. Então, se eu apenas ir em frente e excluir isso aqui, nosso código será muito simples, er porque agora nós não estamos dizendo que este Alec laggard era um novo delegado lager e, em seguida, apontou a cadeia de entrada racks. Mas podemos ir em frente e rapidamente declarar que estamos apontando para esta mensagem de string simples direita aqui. Então delegar inferência significa que o compilador apreensão descobrirá o tipo que ele precisa para criar uma nova instância fora. E então nós também vamos verificar se o método escrito aqui é comparável a esta declaração . O que temos aqui e desde que esta string simples direita é um método que leva uma string e retorna void. É absolutamente perfeito para um compilador C afiado porque através deste delegado lager delegado aqui podemos apontar para esses tipos off métodos. Então agora podemos ir em frente e rapidamente modificar este tribunal aqui também. Vou apagar este delegado de cerveja aqui e podemos ver que o nosso frio combina perfeitamente. Então, agora, se eu contornar isso, você pode ver que nós obtemos o mesmo resultado que obtivemos anteriormente. Então nós estamos agora apenas focando para isso são colocar cordas aqui e o console e nós obtemos isso. Três são para dizer que já obtivemos antes, porque primeiro estamos apontando para a direita, parecem string, e então estamos adicionando esses dois delegados que apontam para outros métodos, e assim estes três métodos serão invocados. Então agora vamos ser simplificados nossa invocação aqui. Nós também podemos fazer isso Vidar números de processo anteriores causa método também. Então agora não precisamos mais criar uma nova instância aqui. Então podemos nos livrar disso aqui muito rápido e podemos passar em alguns que tornam nosso tribunal aqui muito mais conciso e mais fácil de ler. Comparado com este estranho delegados na realidade Texas metade aqui. Agora nos livramos disso também e que você execute o programa mais uma vez apenas para ter certeza que obtemos todas as funcionalidades que tínhamos anteriormente. E como você pode ver, 10 e 25 estão imprimindo para o cônsul. E nós também temos este texto de saída de árvore aqui. Então aqui você vai, delegar na França, o conceito que pode tornar nosso código mais fácil de ler e mais fácil de usar quando se trata de usar delegados 8. Ação e ação de T: Então, na última palestra, vimos como o conceito fora da inferência do delegado pode simplificar nosso código. E nesta palestra vamos ver como podemos tornar nosso código ainda mais simples usando os tipos de delegados incorporados , ação e ação t no framework dotnet apenas para torná-lo simples e fácil de entender. Eu faria a demonstração em um novo projeto, então eu iria aqui na solução clique em Adicionar novo projeto, e eu chamaria esse delegado de ação e isso será uma aplicação do conselho também. E eu também faço isso como o início do projeto aqui. Então eu só me certifico de que isso vai executar este programa que estamos executando. Eu também me livro disso usando um ano porque nós não usamos esses espaços de nome no momento. E agora vamos ver como usar o delegado de ação de construção. Então, se você se lembrar em seus exemplos anteriores, precisamos declarar um delegado primeiro e, em seguida, instância ela comeu, e os métodos de sinal para ele. Então vamos supor que agora precisamos declarar um delegados personalizados apenas fizemos antes porque gostaríamos de atribuir métodos que não tomam parâmetro e retornar void. Então vamos em frente e rapidamente declarar Delegado Personalizado. Como no nosso exemplo anterior, vá em frente e escreva Delegado Público, Evite. Vamos fazer essa ação que um portão e não vai levar nada. E para usá-lo eu vou em frente e direito Ação delegado Não é igual. E graças à inferência do delegado, podemos simplesmente montar rapidamente o nome do método. O nome do método será Ação um. E você se lembra pressionando o ponto de controle, podemos gerar um método aqui. Nós apenas nos livramos rapidamente disso aqui e desse método. Nós somos simples logo para fora. Ação um é chamado ou ação um está envolvido. Então eu realmente bati. Veja, estamos na linha direita constante, certo? Ação um é chamado em vez de Del tornar-se também chamar esta ação aqui e agora, Ao invocar esta ação, vamos ver o que temos aqui. Não, também está certo. É a linha do Cônsul Vermelho aqui só para garantir que ao executar o programa o Cônsul Avant desapareça a menos que eu aperte Enter. Então, se eu executar isso, vamos ver se temos ação. Um é chamado, mas não vai nos surpreender porque já somos família. Ou com isso temos amigos delegando, e ele também declarou um delegado personalizado como fizemos antes. Mas se você quiser ter a mesma funcionalidade com a ação de construção, não precisamos mais declarar um delegado personalizado. E isso também é muito fácil. A única coisa que precisamos fazer é que em vez de escrever delegado ação, podemos escrever ação aqui e você pode ver que este é um delegado e é método encapsulate que não tem parâmetros e não retorna um valor. É muito bom para nós porque na verdade nosso método de ação um é perfeitamente comparável a isso. Então nós somos calor, entrar e ação certa para ou tem simplesmente ação certa. O que tivemos aqui na linha anterior e eu era apenas comum esta linha para fora. Então eu chamo essa ação e eu realmente atribuo nossa ação um método que tínhamos antes e agora um incêndio neste programa. Você obtém o mesmo resultado todos os que você já teve antes? E o que não precisamos fazer agora é que nós não precisamos desta declaração aqui, então eu também posso excluir isso aqui e aqueles para se livrar dessa linha fora do curso Então, como você pode ver, enquanto vamos mais longe, estamos agora nos expressando mesmo mais simples e mais simples agora que querem assinar outro método ou talvez tivesse outro método para a invocação. Uma lista que é ir em frente e escrever ação mais é igual a ação certa para E podemos gerar outro método. Podemos passar em qualquer método que retorna void e não tem nenhum parâmetro aqui. Então, podemos escrever ação para estes ouro aqui. Agora estamos a comandar isto. Vamos ter t duas invocações de método o que vimos anteriormente e agora você pode ver como esta ação pode nos salvar um pouco de frio e agora não precisamos declarar o próprio delegado personalizado . Mas como funciona a ação? Então a ação off é a versão geral fora da ação aqui e podemos usar a ação t sempre que temos um parâmetro ou mais parâmetros e a mensagem em si também precisa Teoh retorno void. Então, neste exemplo, nós simplesmente usamos a ação porque nós não temos nenhum parâmetro aqui. Mas vamos ser fatorado é ter um parâmetro string e, em seguida, podemos usar a ação fora do e ver como ele funciona. Então vamos dividir essas cordas aqui em invejar. Você vê por que estamos fazendo isso em um momento? Eu escrevo texto string e eu vou fazer este outro método é via para tomar string parâmetro ni ação direita para e simplesmente con coordenar decks aqui. E farei isso no outro método, Isabel. Então esta será a ação um mais dext e apenas para ter a mesma funcionalidade, nosso parâmetro string será chamado. Então, se eu em torno do programa, vamos obter a mesma saída. Só temos visto apenas para torná-lo mais simples e conciso aqui. Mas no momento você pode ver que nós realmente temos um erro de compilador aqui. E é porque nossos métodos têm agora parâmetro vom aqui. E essa ação só é compatível com o método que não tem um parâmetro e retorna void . E o verdadeiro correto é usar a pergunta geral fora da ação. A ação off D. Então agora, por causa de nós temos o parâmetro string, agora precisamos ir em frente e escrever o parâmetro gerar I aqui, que será o tipo que o parâmetro tem. Então, porque o nosso parâmetro de imposto re string simplesmente direita string aqui e esta filmagem que estamos usando uma ação off string. Então, estamos atribuindo métodos que tem parâmetros fora deste tipo. Neste caso, um parâmetro fora deste tipo e nós retornamos void. E como você pode ver , combina perfeitamente. Agora, o único problema com este código é que, a fim de ação ser envolvido, precisamos passar em um parâmetro string aqui, e este parâmetro será chamado. Agora, se eu executar isso, podemos ver que temos o mesmo resultado o que temos antes e agora você pode ver como ação e ação fora D pode substituir os delegados personalizados aqui porque não precisamos mais ter esses declaração bem aqui. Podemos apenas fazer isso em uma linha e atribuído o método também. 9. Func de T, resultado: Então, após a nossa ação e ação de exemplo de chá, vamos em frente e ver como os delegados de função funcionam. Eu crio o novo projeto aqui chamado Funk Delegate. Eu fiz isso o meu início Um projeto e eu também coloquei para métodos estáticos neste projeto. Aqui temos converter para enrolar um e converter para e eles estão convertendo uma string para um inteiro em diferentes maneiras. Precisamos saber o que é isso? No primeiro caso, estamos retornando diretamente o valor sem verificar se a string pode ser convertida ou não E isso pode lançar uma exceção. . Se o fluxo não puder ser convertido, rasgue em perigo. No segundo caso, estamos usando os métodos das partes da tribo aqui. E o que isso faz é que ele primeiro verifica. Se isso fosse você para converter, pode ser convertido para um inteiro e se ele pode ser, então a variável de resultado, nós mantemos seu valor. Este ponto de interrogação simplesmente significa que, se este estado for verdadeiro, a mídia retorna o resultado. Como sabemos que se isso for verdade, então o valor a ser convertido pode ser convertido em um inteiro, então estamos seguros para retornar o resultado Se não, estamos retornando zero. Então este código de uma exceção lançada. Se o valor para conforto não pode ser convertido em um inteiro agora, se você sabe o que é esses métodos têm perímetro de string e também tem um tipo de retorno, e o tipo de retorno é em neste caso, e para esses métodos, nós não pode usar a ação ou ação fora de T mais cenas para esses delegados. Só podemos atribuir métodos que retornam void. E neste caso, temos métodos. Vamos ter retornado onde você e isso significa que precisamos usar outro tipo de delegado embutido , que é o resultado funk off TT. Se eu escrever funk aqui, você pode ver que ele tem 17 sobrecargas. E isso significa que, por exemplo, se eu escrever um tipo aqui, então isso significa que podemos atribuir métodos a este funk, desde que eles não tenham um parâmetro e retornem o tipo que é passado aqui. Se eu usei o segundo overlord, isso significará que o primeiro parâmetro I é o tempo que o primeiro parâmetro precisa ter e o segundo é. Mas o método precisa retornar, e neste caso, você precisa usar essa sobrecarga aqui, já que temos que enviar uma mensagem. Pegue um tipo de uma string e eles retornam um inteiro. Então, se eu ir em frente e escrever String in Tier e vamos chamar este conversor funk, eu posso simplesmente fazer isso igual para converter sua capa dois em um, por exemplo. Agora, se eu quiser usar isso, eu posso simplesmente direito conversor, funk e passando um, por exemplo. E, claro, precisamos ver o retorno onde você estava tão bem na linha direita do console aqui. Agora um incêndio neste programa. Você obtém um como resultado, porque um uma string pode ser visto ser convertido. Mas se eu quiser converter, por exemplo um, então vamos chegar a quatro meses exceção aqui porque você deseja convertê-lo diretamente sem verificar se é possível ou não, e, portanto, neste exemplo, podemos usar o convertido fazendo também. É isso aqui. Então, se você assinar convertido em número, você é simplesmente obter zero como resultado, e nós não teremos uma exceção lançada aqui. Então é isso. Basicamente, a única coisa que você precisa lembrar é que, nos parâmetros gerais de tipo, você pode escrever mais parâmetros. Mas é claro, a mensagem que você atribuiu a este delegado precisa ter os mesmos parâmetros. Neste caso, precisamos ter três parâmetros de entrada string e von Return digite um inteiro. Agora que somos família ou com como funk T t resultado funciona, podemos voltar para o nosso projeto de demonstração delegado aqui. E eu vou fazer isso como o projeto inicial. E se você voltar a isso, quero dizer, fechar todos os documentos e eu só vou abrir o programa que CS E se você voltar para o nosso exemplo, temos delegado aqui mais delegado que retorna vazio aqui para que possamos atribuir métodos que têm ah, parâmetro string e por sua vez void Como isso pode ser substituído? De acordo com a palestra anterior, podemos simplesmente substituir isso com ação off t. Então estamos verificar vários delegado é usado e agora temos cerveja. Eles vão. Foi certo. Corda simples. Então, a fim de simplificar isso, podemos simplesmente ação direita fora string parece certo. String simples e os outros métodos aqui também Tome uma string e retornar void. Ele irá compilar perfeitamente. E agora também podemos nos livrar desta linha fora da quadra aqui. E se você der uma olhada neste chamado Deus, esse processo números mensagem aqui no perímetro de busca. Precisamos passar. Delegar números processo, delegar. E esses números processo Delegado é declarado nesta classe aqui. Como podemos nos livrar disso? E agora que sabemos como o funk Off t funciona, podemos simplesmente ver que Oh, ele tem um tipo de retorno off int e tem que em parâmetros. Se tiver um tempo de retorno, precisamos usar um funk. Então voltamos para a minha aula de calculadora por um momento. E agora aqui, em vez de dizer que precisamos de um processo de números de vídeo delegado, basta dizer que você precisa de uma função que tem que em parâmetros e tem um tipo de viragem de entrada , e isso será nosso funk de processo, por exemplo. E se você voltar para o programa que C S, podemos ver que este tribunal cumpre perfeitamente. E agora não estamos mais usando esse delegado de processo de números aqui, então podemos simplesmente ir em frente e nos livrar dessa classe. Então eu vou excluir este ano muito rápido e agora você pode ver que nós não temos apenas duas classes neste projeto de demonstração delegado. E como é meu projeto inicial agora, eu posso simplesmente ir em frente e comer um cinco para executar este programa. E agora você pode ver que obtemos o mesmo resultado que obtivemos antes. E o código deles pode ser ainda mais simples porque não precisamos que o Teoh declare nenhum dos delegados aqui. E há também outra coisa que precisamos notar que nossa corte não só se tornou mais simples , mas também. Se eu ir em frente e obter meu Courser para esses números de processo agora, podemos ver que este método precisa ter dois inteiros e a função e a partir desta função, deficiência e função delegado, podemos agora ver que Ok, eu preciso passar em um método que tem dois inteiros e retorna e termina em nosso exemplo anterior . Quando usamos números processo delegado, não conseguimos descobrir isso e precisávamos voltar a essa classe delegado processo de números e ver a decoração delegado. E eu acho que isso também pode ser muito prejudicial. Muitas vezes quando você tem um uso complexo de delegados ao desenvolver software