‫E neste vídeo, vamos dar uma olhada em algumas interfaces muito importantes que você deve entender assim
‫que começar a se tornar um desenvolvedor mais avançado e afiado.
‫E essa é a interface enumerável de AI, bem como a interface de enumerador de AI.
‫OK, então você deve entender as interfaces antes de assistir a este vídeo, porque caso contrário, alguns dos
‫conceitos não farão sentido para você potencialmente.
‫Então, eu realmente recomendo dar uma olhada no vídeo de interface que temos a oferecer também.
‫OK, então a interface enumerável AI é a melhor interface para muitos sinciciais de coleção e seu trabalho é fornecer
‫uma maneira de iterar por meio de uma coleção.
‫Então é por isso que podemos usar para cada lubrificante para percorrer uma lista ou um dicionário, porque
‫eles são herdados da interface inumeráveis da interface inumeráveis e do inglês simples.
‫Quando uma classe de coleção implementa a interface inaugural, ela se torna responsável e
‫podemos contar cada elemento individualmente.
‫Portanto, existem duas versões diferentes da interface enumerável AI.
‫Uma é que funciona para coleções genéricas onde você tem colchetes de abertura enumeráveis, colchetes de fechamento
‫e, em seguida, a interface enumerável de AI para coleções não genéricas.
‫OK, então você deve entender o que são coleções genéricas e não genéricas também.
‫Eles têm certas vantagens e desvantagens, mas também tenho um vídeo para isso.
‫Espero que você tenha assistido antes de assistir a este vídeo, porque senão é um pouco complicado.
‫OK, então esses dois que temos aqui, vamos dar uma olhada neles.
‫Como as coleções genéricas foram introduzidas após as coleções não genéricas, é recomendável usar
‫as coleções genéricas.
‫Então, eles são basicamente uma versão melhorada, por assim dizer.
‫Portanto, se você está criando um novo projeto, é recomendável usar a versão genérica porque e
‫eu enumerável para coleções não genéricas, precisa aplicar ou realizar boxing e on boxing, que basicamente é
‫a conversão de tipos de objetos.
‫E mais tarde explicaremos como usar a interface AI Enumerable T ou a interface de coleções genéricas.
‫OK, não vamos examinar a interface de coleções não genéricas porque ela não é recomendada
‫devido ao boxing e unboxing, que é menos eficiente.
‫Portanto, agora vamos examinar a diferença entre o enumerável AI e o enumerador AI.
‫Você talvez já tenha ouvido isso antes.
‫Portanto, a interface enumerável AI contém um único método que você deve implementar ao implementar esta
‫interface.
‫E vamos fazer isso mais tarde em nosso exemplo particular aqui.
‫Então, faz um pouco mais de sentido.
‫Portanto, o método Get enumerator é aquele que você precisa implementar e retorna um objeto enumerador de AI.
‫OK, então este método que você precisa implementar quando quiser usar um enumerável AI para sua classe
‫ou o que você deseja implementá-lo para sua classe, você precisa ter este método get enumerator, que
‫retorna um enumerador AI.
‫Então, o enumerador AI.
‫Fornece a capacidade de reiterar através da coleção, expondo uma propriedade atual que aponta para
‫o objeto que estamos atualmente na coleção.
‫OK, isso é muito mais complicado do que quando realmente o executarmos em nosso exemplo particular.
‫OK, então vamos construir um exemplo, entendendo completamente o que tudo isso significa.
‫Portanto, isso é apenas para prepará-lo para o que você pode esperar.
‫OK, então vamos começar.
‫Finalmente me afastando de toda essa teoria.
‫Vamos realmente dar uma olhada na prática.
‫Então, vamos criar esta pequena classe chamada Dog e vou colocá-la no mesmo arquivo para manter as coisas
‫simples.
‫Portanto, temos essa classe chamada Dog com um nome e esse booleano chamado não é IDOC.
‫Então, vamos basicamente verificar se o cachorro é travesso ou não.
‫E com base nisso, vamos dar guloseimas para ele.
‫OK, então se ele não for um cachorro travesso, você receberá menos recompensas do que se ele for um bom menino ou um bom cachorro.
‫OK, então o construtor aqui basicamente define esses dois valores.
‫Então, quando criamos um objeto cachorro, vamos dar a ele um nome e um booleano, sendo cachorro ou não, você não
‫é.
‫E então nós temos este método de presente e isto basicamente imprimirá o que o cachorro disse.
‫Portanto, para cada pessoa que tratar o cachorro, ele dirá: OK, então, basicamente, se ele for um bom cachorro, você
‫receberá petiscos e o fará duas vezes.
‫E se ele for um cachorro mau ou um cachorro travesso, ele se moverá apenas uma vez porque receberá menos guloseimas.
‫OK, agora temos esta classe dog e podemos prosseguir e criar objetos dog, então vamos ter esta outra
‫classe.
‫Vamos supor que temos outra classe que usará cães dentro de uma lista.
‫OK, então temos esta aula de abrigo para cães.
‫Portanto, esta aula de abrigo para cães terá uma lista de cães.
‫Portanto, precisamos ter certeza de que temos isso usando coleções de sistema genéricas porque lista
‫é uma coleção genérica.
‫OK, então aqui no topo você verá que agora você tem isso usando coleções de sistema genéricas.
‫OK, agora que temos este abrigo para cães e esta lista de cães no construtor deste abrigo para cães,
‫a única coisa que vamos fazer é inicializar a lista deste cão com um bando de cães.
‫Portanto, temos o cachorro Casper ou o cachorro chamado Casper.
‫Ele não é um cachorro safado, mas Siff é um cachorro safado ou verdadeiro não é safado e Pixel também não é safado.
‫Portanto, não me pergunte como chegamos a esses nomes, mas é basicamente assim que vamos chamá-los.
‫Você poderia, é claro, tornar todo esse aplicativo muito mais complexo.
‫Mas nossa ideia é apenas usar essa lista de cães para iterar pelo abrigo de cães, para passar pelo abrigo de cães,
‫basicamente, e com base no fato de um cachorro ser bom ou não, ou um cão travesso ou não, vamos
‫dê a ele uma guloseima ou duas.
‫Agora, vamos passar ao nosso método principal, porque é aí que está o ponto de partida da nossa aplicação.
‫E neste ponto, vamos criar um abrigo para cães aqui.
‫Tudo bem.
‫Portanto, temos um abrigo para cães chamado Shelter, e será um novo abrigo para cães.
‫Então, nós o inicializamos imediatamente para que possamos usar este objeto abrigo porque o objeto abrigo
‫conterá uma lista de cães.
‫Direito.
‫Portanto, agora o que queremos fazer é iterar a lista e verificar se queremos dar a eles guloseimas ou
‫não.
‫Então, vamos criar um para cada ano, toque duas vezes, a fim de prepará-lo para nós.
‫Então, pelo que vamos passar?
‫Bem, estamos passando por um cachorro.
‫E vamos chamá-lo de cachorro, então cada item dentro da lista será um cachorro e então a
‫coleção pela qual queremos passar será, na verdade, o abrigo.
‫OK, agora temos um pequeno problema, uma vez que passamos o mouse sobre ele, dizemos que vemos seu nome de coleção
‫ou matriz para iterar através do abrigo.
‫Mas a instrução for each não pode operar em variáveis do tipo dog shelter
‫porque dog shelter não contém uma instância pública ou definição de extensão para get enumerator.
‫OK, então temos este get enumerator.
‫Então, o que isso significa?
‫Bem, isso significa que precisamos implementar a interface enumerável aqui mesmo para o nosso abrigo para cães, porque este abrigo para cães
‫tem uma lista que queremos percorrer.
‫Direito.
‫Porque se você olhar para ele, abrigo, bem, nosso abrigo para cães, esse é o abrigo que queremos percorrer.
‫E para torná-lo iterável, precisamos implementar o enumerable aqui.
‫E que tipo de objetos queremos enumerar?
‫Bem, no nosso caso, serão os cães.
‫Então, queremos poder examinar os cães dentro do abrigo para cães porque, bem, temos essa lista
‫de cães e ela foi inicializada aqui no construtor do abrigo para cães.
‫E queremos ter certeza de que podemos simplesmente passar por todos eles e fazer algo com os
‫cães, como acariciá-los ou, no nosso caso, dar-lhes uma guloseima.
‫Assim, uma vez que você implementa isso e sobe aqui, o erro desaparece.
‫Então, de repente está tudo bem porque, bem, nosso abrigo, que é um abrigo para cães, agora segue
‫as instruções que acabamos de nos dar de que precisa implementar um ano enumerável.
‫Então esse é o enumerável genérico porque temos esse cachorro bem aqui, certo, porque não é
‫esse, é aquele com o tipo que estamos dando a ele.
‫Mas agora, uma vez que temos nosso robô, vemos que temos outro erro.
‫Ele diz que o abrigo para cães não implementa o membro da interface I enumerable dog get enumerator e o
‫inumerable get enumerator para que possamos colocá-los manualmente lá.
‫Mas a beleza de usar um I. D. é que o ID pode fazer muito
‫trabalho para nós, então você pode clicar em mostrar possíveis correções e, em seguida, clicar em implementar todos os membros explicitamente e, em seguida,
‫adicionará o namespace de coleções para nós e cuidará de adicionar esses dois métodos para nós ou aqueles dois membros.
‫Assim que clicarmos nisso, você verá que esse erro desaparecerá.
‫E se rolarmos mais para baixo, você descobrirá que agora estamos retornando um enumerador I de cão do
‫tempo e uma coleção de enumerador I não genérico.
‫Portanto, ainda não o implementamos.
‫É por isso que lançamos a exceção de você não implementou aqui.
‫Portanto, precisamos mudar isso aqui.
‫Agora podemos implementar o que deve acontecer com o método arget enumerator, uma vez que é chamado assim
‫para consertá-lo, o que vamos dizer aqui é apenas return.
‫Cachorros, nossos cachorros não recebem enumerador desse jeito.
‫E essa será a implementação porque nosso abrigo para cães agora está implementando a interface enumerável e nossa lista aqui
‫é, na verdade, ei, se você passar o mouse sobre ela, uma lista é uma lista genérica.
‫OK, e agora podemos pegar esses cachorrinhos e obter o enumerador para cada iteração que nosso para cada
‫dois irá percorrer.
‫Então, basicamente, ele retornará para cães individuais.
‫E agora o que podemos fazer é usar o cão em ordem para cada loopier.
‫Então, basicamente significa que podemos ir em frente e verificar se o cachorro não é Nodi, então não é cachorro, isso
‫é Mordy.
‫Se for esse o caso, basicamente significa que se o cão não for travesso, vamos chamar o
‫método dar guloseima e vamos dar-lhe duas guloseimas.
‫E senão, se ele foi safado porque a gente não pode deixar de dar guloseimas, a gente adora falar demais,
‫a gente vai só dar uma guloseima, tá bom assim.
‫E neste ponto, não podemos executar nosso aplicativo.
‫E veremos, Casper disse, Lobo, duas vezes porque ele é um cachorro bom, cheirar é um cachorro travesso, então
‫ele ganha apenas uma guloseima e diz, Lobo, uma vez que Oreo o faz duas vezes e Pixel diz que se mexeu duas vezes também.
‫Tudo bem.
‫E é basicamente assim que você pode fazer sua classe seguir as instruções ou implementar e eu enumeráveis para
‫que você possa percorrer uma lista usando o for each loop, por exemplo, como temos aqui.
‫OK.
‫Agora, você pode se perguntar, por que não estamos implementando para obter enumerador com o olho enumerável, aquele
‫que não é genérico?
‫Bem, isso é porque não usamos um exemplo não genérico.
‫E nosso abrigo para cães também não é mais genérico, mas apenas que você precisa implementá-lo ao usar a interface
‫enumerável de olhos, caso contrário, se você se livrar dele, receberemos um aviso aqui novamente.
‫Você vê que aqui havia na verdade uma seta, então precisamos ter certeza de que temos esse método lá também.
‫Tudo bem, então é isso neste vídeo e no próximo vídeo, vamos olhar outro
‫exemplo onde vamos tirar proveito do olho, inúmeros ainda mais.
‫OK, então esta foi apenas uma pequena introdução.
‫Sei que esse tópico é bastante complexo e complicado, mas vamos tirar vantagem deles um pouco mais.
‫E agora, por falar nisso, apenas um rápido, apenas um resumo aqui.
‫Quando é recomendado usar a interface enumerável de olhos?
‫Bem, você deve usá-lo quando sua coleção representa uma grande tabela de banco de dados.
‫Portanto, você não deseja copiar tudo na memória e causar problemas de desempenho em seu aplicativo porque o banco de
‫dados pode ser enorme, certo?
‫Pode ter milhões e milhões de entradas.
‫E você não quer ter que carregar tudo para iterar por ele, mas você quer
‫apenas carregar o quanto você precisa para o processo atual, seja o que for que você queira executar.
‫E então, quando você não deve usar a interface enumerável do olho?
‫Bem, quando você precisa dos resultados de imediato e possivelmente está sofrendo mutação, admitindo os objetos mais tarde, neste
‫caso, é melhor usar um array ou uma lista.
‫Então, quando você quiser ser capaz de alterar ou adicionar objetos posteriormente e não precisar
‫dos resultados imediatamente, use uma matriz ou lista ou então use e eu enumerável porque será mais eficiente.
‫Tudo bem, então é isso para este vídeo.
‫Te vejo no próximo.