You are on page 1of 44
Verda 20 wimarcebsincte.com br Pinna? deS 1 Visdo Geral do Visual Basic.NET 1.1 Conceitos Basicos 1.1.1 Regras de Codificagéo em VB.NET. 11.2 Projetos e Solugdes 113 Classes. .2 1.2 Formularios e Controles 1.2.1 Utilizando Controles 1.22 — Manipulagao de Coniroles 1.23 Debug 1.2.4 — Compilagao 2 Manipulagao de Varidveis 2.1 Nomeando Variaveis 2.2 Tipos de Dados do Sistema 2.3 Utiilizando Variaveis CTS 23.1 Criagao e Atribui¢o de Valor 232 Operadores e Precedéncia 2.3.3 Manipulagao de String 2.4 Conversées Implicitas e Explicitas 2.5 Tipos Compostos 2.6 Constantes e Read Only 3 Instrugdes Condicionais, Lagos e Desvios 3.1 Contexto de Variaveis 3.2 Comparativos 3.2.1 Comando If 3.22 Comando Select Case 3.3 Lagos 3.3.1 — Comando While e Do 3.3.2 Comando For...Next 33.3 Comando For..Each 3.4 Desvios 4 Tratamento de Erro. 4.1 Erro de Execucdo sem Tratamento. 4.2 Try..Catch..Finally 42.1 Try...Finally 422 Throw 5 Métodos. 5.1 Definig&o de Métodos 5.1.1. Metodos Compartilhados sem Retomo 5.1.2 Métodos Compartilhados com Retomo ©ONNN GORE ® ” 1 cr 1 4 42 12 13 13 14 15 15 15 15 16 16 18 17 17 18 19 19 19 20 20 22 22 22 22 Verda 20 wimarcebsincte.com br Pinna 3 des 5.2 Recebendo Parametros 5.21 Parametros de Entrada (ByVal) 5.2.2 Parametros Referenciais (ByRef) 5.2.3 Parametros Multiplos 5.3 Overload de Métodos 6 Arrays e Parémetros. 6.1 Definigéo 6.1.1 Definindo Arrays 62 Métodos Comuns. 7 Classes Basicas do NET Framework 7.1 Classe AppDomain 7.2 Classe Security 7.3 Classe 10 8 Classes e Objetos, 8.1 Definigao de Classes e Objetos 8.1.1 Abstracao e Encapsulamento 81.2 Heranca 81.3 Polimorfismo 8.1.4 Classes Abstratas 8.1.5 Interfaces 8.2 Criagao e Instanciamento de Classes 8.2.1 Propriedades e Enumeradores 8.2.2 Construtores 82.3 Destrutores. 8.3 Controle de Acessibilidade 8.3.1 Métodos Compartilhados 9 Herangae Polimorfismo. 9.1 Classes e Métodos Protegidas 9.2 Polimorfismo 10 Namespace, Delegates e Operadores. 10.1 Namespace 10.2 Delegates 10.3 Eventos, 23 23 24 25 26 28 28 29 geese 32 32 33 33 33 35 36 37 37 38 39 40 a 43 43 Verda 20 wimarcebsincte.com br Pinus des 1 Visao Geral do Visual Basic.NET 1.1 Conceitos Basicos Antes de codificar um programa dentro do Visual Studio precisamos conhecer as regras basicas de cédigo, conceitos de projetos e classe, utilizagao e manipulacao de propriedades dos objetos, debug e compilagao. 1.1.1 Regras de Codificagéo em VB.NET Ao utilizar duplo clique no formulario “Form1” abrimos 0 editor de cédigo e inserimos apenas as das linhas dentro do bloco “Form1_Load”. O restante do cédigo que pode ser notado faz parte do objeto formulario padrdo. Algumas das principais regras de sintaxe do VB podem ser notadas no exemplo: ‘+ Nao existe um método inicializador dentro dos objetos do projeto. O método Main @ opcional e deve constar em médulo. Nao existe delimitador de final das linhas de instrugées. Classes e instruges de bloco iniciam com sua declaragao e terminam com End. Existem dois modelos de codificagao, PascalCasing e came|Casing. Por padrao todo 0 framework 6 baseado em PascalCasing, ou seja todas as primeiras letras em maiusculo, incluindo nas classes do CLR, como por exemplo a classe System.InteropServices. O VB.NET também tem suas instrugdes em PascalCasing, nao sendo abrigatéria a digitacao exata, o VS corrige a capitulacao. + Alidentagao nao é obrigatéria para a linguagem, mas extremamente recomendavel na codificacao. Como pode ser visto, a identacao esta na linha onde consta o Msgbox esta no Verda 20 wimarcebsincte.com br Pini 5 de3 quarto nivel, sendo o nivel principal o nome da aplicagao, 0 segundo nivel a classe do formulario, 0 terceiro nivel é 0 método Load. No VS a identagao automatica + Para fazer comentarios utiliza-se as duas apéstrofo "”, que podem ser usadas tanto em uma linha inteira quanto no final da linha. Ao compilar um projeto, os comentarios sao excluidos do assemble. 1.1.2. Projetos e Solucées No VS todas as aplicagdes sao chamadas de projetos. Cada projeto é um assemblie, seja este um executével, dll ou aplicacao web. O tipo de assemblie a ser gerado pode ser alterado por se clicar com 0 boto direito no nome do projeto e escolher Properties feeefentrt = Re ea ee) Existem algumas limitag6es quanto a alteragao do tipo de assemblie a ser gerado. Aplicagdes WinForms, Console e Library podem ser convertidas entre elas sem problemas, mas aplicagdes web 's6 podem ser convertidas entre si, no caso 0s projetos do tipo Web Application e Web Services. DICA: Diferente do Java, no .NET néo ha ligacao entre o nome do assemblie e das classes nem no namespace (detalhes no médulo 10). Startup Object é um formulario ou © método (formuldtios no NET tambem sao classes) que contenha o método Main. Um importante recurso provido pelo VS 6 trabalhar com 0 conceito de Solution ou solugao. Podemos agrupar diferentes tipos de projetos em uma solucao, como por exemplo, em uma Unica solugao ter dois projetos WinForms, um projeto web service e um quarto projeto web application. Utilizando solugdes conseguimos em uma Unica janela do VS aberta trabalhar com todos os projetos a que estamos envolvidos. DICA: Solutions néo devem ser compartilhados entre usudrios, enquanto projetos sim. Um projeto utiliza como extensao de arquivo 0 acrénimo da linguagem mais a palavra proj, por exemplo vbproj e cproj. Ja as solugdes utilizam a extensao sin e ficam sempre no diretério local do usuario, enquanto 0 projeto pode estar na rede ou no servidor web quando a aplicacao ¢ do tipo web application. 1.1.3 Classes Nao entraremos em detalhes agora sobre recursos das classes, mas precisamos entender a estrutura de um projeto, e para isso é essencial entender o conceito das classes, Verda 20 wimarcebsincte.com br Pini 6 des Classes so objetos que podem ou nao se tomar componentes. Damos 0 nome componente aos assemblies, e um mesmo assemblie pode conter diversas classes. Da mesma maneira, 0 arquivo fisico no disco que contem as classes, extensdo cs para C# e vb para Visual Basic, podendo contem miltiplas classes internamente. Veja o diagrama abaixo para entender melhor este conceito. Solugao Apesar de estarem dentro do arquivo Class? as trés classes sao totalmente independentes ao serem compiladas. Ou seja, nao importa 0 arquivo fisico onde as classes esto, uma vez que na compilacao nao existem arquivos fisicos, apenas classes. Imagine que no assemblie compilado estard apenas as classes Form, Automéveis, Motociicietas e Bicicletas dentro do componente WindowsApplication2. DICA: Uma arquivo pode conter miltiplas classes, mas uma classe nao pode ser em miiltiplos arquivos. Uma classe sempre utiliza um escopo, neste caso public (detalhes no médulo 6), a palavra chave Class eo nome definido. Todas as classes iniciam e terminam com os delimitadores de chave. Verto: 20 wimarcebsincte.com br Pinna 7 des 1.2 Formularios e Controles 1.2.1. Utilizando Controles Controles s&o os objetos gréticos utlizados em formularios. Ao utilizar formularios, seja do tipo windows ou web, podemos arrastar os controles da barra de ferramentas (toolbox). Segue abaixo uma lista dos principais controles utlizados em aplicages WinForms. Teone Fungo ‘barra de rodape Tika ulizada nos apiavos como Office, Explorer © ulios para mosWar esado de oles, Bi saute data e hora, e qualquer outra dado utiizando painéis Di tacontra ‘Guias como as do propredades permiindo mUltplasjanelas om um ico @spaso (i TextBox 30 Then Msgbox(’Name ncorrete. Digite Novamente") toxtBox2.SeiFocus() bso Msgbox("Idade aceita. Obrigado’) End it End if Note que caso a idade esteja correta agora o Else possui um bloco, e dentro deste bloco lemos 0 nome escrito no textbox e verificamos 0 tamanho do nome. Se o nome for menor que 5 ou maior do que 30 caracteres, voltamos ao textbox para que ele redigite 0 nome. Caso esteja correto entra no segundo Else que mostra a mensagem de dados aceitos. DICA: O comando if encadeaao sé deve ser utilizado quando as condigdes sao diferentes. Nao se utiliza quando a condigéo com a mesma varidvel. Nestes casos utiliza-se 0 Select Case. 3.2.2 Comando Select Case A sintaxe basica do comando Select Case é: ‘Select Case Variavel Case 1 Instragao break Case2 Or3 Ora instrogao break Case Else insirsgo break End Select Para utilizacao do Select Case utiliza-se um bloco definido e uma condigao dnica. Cada diferente valor assumido por esta condigao ¢ verificada em uma instrugao Case, seguida do valor comparado e operadores légicos. A instrugao Case Else sinaliza a instrugao caso nenhum dos Case anteriores retorne verdadeiro. No exemplo, se o valor for acima de cinco entrara as instrugdes do Case Else ja que os Case nao retornaram verdadeiro. Veja abaixo um exemplo comparando 0 tamanho do texto digitado: Toxo = toxtBox!.Text ‘Atrbui a variével Select Case TextoLengih Compara tamanto da sing Case 10 Or 11 Or 12 "Os tb valores coorem como tinea eonelsso Msgbox("Acima de 10. 12") case 13: ‘Msgbox("Valr 613°) Case Ee Caso 0 valor esteja dterente de 10 a 13 ‘Msgbon('Néo encontre. break End Solect 3.3 Lagos 3.3.1 Comando While e Do Estes dois comandos possuem a sintaxe ¢ funcionalidade similar, sendo o momento de comparagao a principal diferenca entre eles. A sintaxe basica da instrugao While é: Verda 20 wimarcebsincte.com br Piging 17 de 45 Do White condicéo instuugSes Loop A sintaxe basica da instruao do é: Do instupoes Loop Whe condigao Como pode ser notado entre os dois comando a diferenga ¢ que no while fazemos a comparacao de condigao na entrada do bloco, portanto pode acontecer de nem sempre ser executado, enquanto 0 do processa a primeira execucao e a comparacdo é validada para continuacéo do laco. Por exemplo, veja os dois cédigos abaixo: Dim Contador As Inieger= $—‘Variévelincia em 1 ‘Do While Contador > 10 Este cédigo nunca ir rodar Console WrteLine("Rodet..while') Contador += 1 Loop ‘Bxecuta agora 0 do com a mesma condicao Do Este edcigo roda a primeira vez pols a comparacao s6 esta no final Console Wotetine("Rodei..do") Contador += 1 ‘Loop Wie Contador < 10 3.3.2 Comando For...Next E possivel utilizar o comando While e Do para processamento de lagos continuos, mas neste caso desperdigamos algumas linhas de cédigo para definir a varidvel e incrementa-la. Jd 0 comando For permite que fagamos lacos seqiléncias com poucas linhas. Sua sintaxe basica é: For variavel = x To y Step incremento instrugses Next Veja o exemplo anterior utilizando a instrugao For: Dim Contador As Integer For Coniador = 1 To 10 Step 1 Console Writetine("Rodei.{0) Contador) Next No exemplo criamos a variavel contador antes da instruc&o do tipo inteiro. Na segunda linha informamos que o laco iré comecar em 1 terminar em 10, de 1 a 1. O Step nao é obrigatério quando o ineremento 6 apenas um. 3.3.3. Comando For...Each © comando For possui a limitacao de trabalhar com uma condigao pré-fixada em oédigo. Isto algumas vezes limita as possibilidades de contar objetos ou colegdes onde nao temos o numero exato de ocorréncias. Quanto queremos comparar colegdes utilizamos 0 For...Each, uma vez que ele faz 0 lago nao por comparacao de valores mas sim por quantidade de itens em um conjunto, qualquer que seja este. A sintaxe basica do For... Each é: For Each Variavel in Conjunto instrugdes Next Para exempliticar a diferenca entre o Fore o For...£ach imagine uma colegao com 10 nomes criados abaixo: ‘Dim Nomest10) As Strng Dim Laco As Ineger Verda 20 wimarcebsincte.com br Piging Bde 45 For Laco = 1 To Nomes.Length ‘Dim NomeCarente As Sting NomeCorrente = NomesiLaco) Console WeieLine(NomeCorrente) Next Dim Nomeatual As String For Each NomeAtual fn Nomes Console Wrtetne/NomeAtual) Next Note que 0 primeiro Fornecessitamos utilizar um contador, comparar até quando este contador ¢ valido e utilizar 0 item array, 0 numero utilizado como indice. No segundo, utilizando o For...Each, para cada string que o conjunto de strings Nomes contem é atribuido uma variavel NomeAtual e esta é impressa sem anecessidade do indice. Algumas consideracdes sobre For... Each é que o tipo tem que ser 0 mesmo do conjunto, para cada indice do conjunto é alimentado uma variavel temporaria que aponta para o valor e automaticamente termina ao final da colegao. Isto pode ser visto no exemplo, pois Nomes é um conjunto de dez strings © a cada diferente posigao a variavel NomeAtual ganhava o valor da seqiiéncia. Portanto, a variavel NomeAtual alterou de valor dez vezes. 3.4 Desvios Apesar de ser uma linguagem estruturada o VB possui algumas caracteristicas de linguagens estruturais como pulos de cédigo em caso de cédigos condicionais particionados. As instrugdes que permitem desvios s4o Gotoe Exit. A sintaxe basica das instrugdes de desvio sao: Private Sub Testi) Dim Vaior As integer = Cin(textBox'. Text itVabr = 10 Then ote Escaper 80 ote Final end it Ext Sub Escape! Console WriteLine("Enirei no escape’) Goto Final Final: Console Waitetine("Estou saindo’) End Sub No exemplo se o valor digitado for 10 desviamos a execugao para os eédigo dentro do bloco Escape! que redireciona para 0 bloco Final Este modelo de programacao ndo ¢ muito utilizado por ser desestruturado, mas em certas situagées podemos utilizar para controlar dentro de uma condicional situagdes especificas. Por exemplo, em uma instrugao Select Case quando existem diversas condigdes e cada condigao possui diversas linhas de cédigo, a visualizacao das condicées e instrucdes pode ficar prejudicada pelo tamanho. Neste caso 0 Goto melhora a leitura do Select Case sem criar métodos adicionais no sistema As instrugdes Exit For, Exit Sub, Exit Function e Exit Do sao utilizadas dentro de seus respectivos blocos para indicar que deseja fechar o método ou o lago. Verda 20 wimarcebsincte.com br Piping de 45 4 Tratamento de Erro 4.1 Erro de Execugao sem Tratamento Quando executamos um bloco de cédigos precisamos tomar 0 cuidado de nao deixar o sistema parar a execucao com cédigo de erro padrao do CLR. Este tipo de mensagem nao ¢ facilmente entendida pelo usuario, alem de passar a impressdo de um cédigo mal feito e instavel. Em caso de erros no CLR é mostrada uma mensagem de tratamento permitindo que o sistema continue a ser utilizada, mas aquele método serd desconsiderado, ou entao pode-se escolher fechar a aplicagao. (citi priconn sal ree ear eet cram Ip dc Gal he pps db sed am mre rousing mat ot in a covet eet 4.2 Try...Catch...Finally Para controlar e melhorar utilizamos as instrugées Try, Catch e Finally. Primeiro vamos explorar 0 Try...Catch que possui a sintaxe abaixo: Ty instupbes Catch Variavel.as Exception instucbes End Try Como exemplo, podemos fazer o teste alterando uma variavel para ocorrer um erro e trata-lo, conforme 0 exemple abaixo: Dim Numero As Integor= 12345 Ty Numero = s898a0 Console WiteLine(-Numero altorado.) Catch Ero As Exception ‘Msqbox(‘Coarreu um erro na aplicagao.* + Erro.Message) End Try No cédigo as duas linhas dentro do bloco delimitado pelo Try so executadas e em caso de erro dispara uma mensagem com 0 texto do erro ocorrido. Apesar de ser permitido utilizar um bloco de tratamento dentro de outro, o VS nao permite pois 0 tratamento de erro fica retrogrado, executando todos os que estejam dentro. Por outro lado a instrugao Catch pode conter diversas condicdes, mas para entender precisamos primeiro conhecer as classes Exception. Em algumas linguagens, como por exemplo 0 VB6, os ertos eram identiticados pelo numero. Isto podia ser um problema porque alguns erros eram especificos de banco dados, acesso, seguranca, Verda 20 wimarcebsincte.com br Paging 20 de 45 disco e outros, e para descobrir precisamos compatar o numero e ler a string de retomo para tomar a acao corretiva. Em .NET esta problema nao acontece porque cada tipo de erro possui seu proprio conjunto, ou colegao,de atributos. Por exemplo, OverflowException, SQLDataAccessException, RankException, SyntaxErrorException, etc. Utilizando este modelo de erros do NET, imagine o exemplo abaixo: ‘Dim Numero As Integer » 12345 Ty Numero ~ 888868 Console WhteLine( Numer alterado.7 Catch Estouro Ae Overtowexcenton ‘Msghox( Vator maior qe 0 possivel) Catch Ero as Excopton ‘Msgbox(‘Ocorreu um erro na aplicagao.* + Ero Message) End Try Note que o Exception anterior nao foi retirado, assim podemos garantir que se o erro for estouro ira ocorrer 0 primeiro Catch, mas caso ocorra um erro diferente de estouro 0 cédigo seguinte, genérico, 6 executado e mostra a mensagem do CLR. 4.21 Try..Finally Finally tem uma fungo agregada as outras instrugdes de tratamento de erro, sendo executada com ou sem erro. © exemplo anterior atualizado seria: Dim Numero As Imeger » 12345 Ty Numero “= 888888 Console WteLine("Numero altorado.) Catch Estouro As Overlowexcapton ‘Msqbox( Valor maior que © possivel') Catch Err as Excopion ‘Msgbox("Osorreu um ero na aplicagi. *+ Ero Message) Finaly MsgboxiNumero. ToStng() End Try cédigo encontrado no Finally ird mostrar uma mensagem com o numero resultado da operacao, tendo sido multiplicado ou nao. 4.2.2 Throw Ao utilizarmos cédigos em classes e termos um formulario ou pagina web executando este cédigo no podemos deixar um erro ocorrido na classe parar 0 sistema sem avisar a fonte, quem chamou a classe. A este processo chamamos de host o sistema que utiliza a classe, e a classe chamamos de objeto. Nestes casos precisamos que 0 e1ro ocorrido na classe seja enviado para o host, e este é que precisaré mostrar 0 erro conforme as regras do software. Para isso utilizamos a instrugdo Throw. A sintaxe desta instrugao 6: Throw New Exception( Mensagem de Ero") Para exempiificar 0 processo, veja 0 exemplo abaixo de uma classe: Publ Class Galeulos Public Sub Muttiplica(N1 As Integer, N2 As integer) ‘Dim Resutiado As Integer 1% Resultado = Ni" N2 Catch Emo As Exception Throw Now Exception(‘A muttiplcacdo nao fol reattzadla.’) Verda 20 wimarcebsincte.com br Paging 2 de 45 End Try End Sub End Clase ‘Agora veja o exemplo de um programa que utilize a classe Publ Class Teste Public Sub Main() ‘Dim objtatematico As Caleuls ~ new Catules\) Ty objMatematico.Muttiplica (323,444) Catch Eno As Excepion ‘Msgbox(Err. Message) End Toy End Sub End Class ‘Ao chamar o cédigo da classe de céiculos garantimos que os erros acorridos serao langados até quema ou. Isto garante que 0 erro seja mostrado e tratado na aplicacao, por exemplo, uma aplicacdo pode gravar em arquivo, outra enviar email e assim por diante. Se a classe executasse 0 cédigo de erro internamento seria impraticavel os diferentes tipos de log de erro. Verda 20 wimarcebsincte.com br Paging 2 de 45 5 Métodos 5.1 Definigéo de Métodos Metodos sao porcdes de cédigos que podem ser executados por outros cédigos. Sao comuns em qualquer linquagem, disponibilizando aproveitamento de funcionalidades entre diferentes partes de um mesmo cédigo, alem de interagirem com objetos. Alguns exemplos de métodos 6 0 click do bolo, 0 load do formulario, etc. A criagao basica de um método segue a sintaxe’ ‘Sub NomeDaldetodo(ListaDeParametres) instugdes End Sub Neste momento nao estaremos diferenciando escopo, o que sera analisado no médulo 6. A palavra chave Sub indica que 0 método nao retorna dados, ele apenas processa. Caso 0 método deva retornar um valor, por exemplo, no local de Sub se usaria Function. A chamada de um metodo é feita por colocar o nome mais a lista de parametros que ele contenha. Nos exemplos abaixo isto sera demonstrado. 5.1.1 Métodos Compartilhados sem Retorno Métodos compartilhados sao aqueles que possuem a execucao independente da criagdo de uma classe por outra, so métodos que nao podem ser multi-instanciados. Métodos sem retorno sao utilizados para lidar com variaveis estaticas. O exemplo abaixo cria um método Iniciar e um método Mostrar que de uma varidvel: ‘Shared Contador as Ineger ‘Shared Sub ine) Contador += 4 Mostrar) End Su ‘Método Mostar ‘Shared Sub Mostrar() Contador += 4 Console. WriteLine(Contador. ToString()) End Sib Neste exemplo 0 método /niciar utiliza uma variavel chamada Contador que contem um néimero inteiro compartilhado. Apés somar mais um na variavel 0 método Iniciar chama o método Mostrar que utiliza a mesma varidvel Contador. Isto é possivel porque métedos compartilhados s6 criam & enxergam variaveis do tio compartilhadas. Variaveis compartilhadas s&0 aquelas que ao serem criadas s6 deixam de existir quando a classe onde foram criadas sao fechadas. Este tipo de variavel nao pode ser utiizado fora da classe em que foram criadas. prime na tela o valor corrente 5.1.2 Métodos Compartilhados com Retorno Reescrevendo o cédigo anterior agora retornando um valor, 0 nosso exemplo ficaria: ‘Shared Contador as neger ‘Shared ‘Sub nei) Contador += 5 Dim Fesutado As Bookean Verda 20 wimarcebsincte.com br Piging 8 de 45 FResuitado = Mostar End Sb ‘Método Mostrar ‘Shared Function Mostar) As Baokean Tw Contador = 1 Rot Tre Catch Retum False End Try End Sub Neste exemplo podemos notar que a fungao Mostrar nao é mais sub e sim function, indicando que agora ela tem como saida, ou retorno a quem a chamou, um valor verdadeiro ou falso (Boolean), indicando que 0 método executou ou ndo com sucesso. Da mesma maneira, notamos mudangas no método Mostrar que dentro do Try retorna um True indicando que nao ocorreu erro ou, caso ocorra erro, retomando False. Este valor permite ao método Iniciar que tez a chamada saber se 0 cédigo interno da fungao Mostrar executou corretamente ou nao. Note que no exemplo do método foi utiizada a instrugao Return que tem a fungao de fechar 0 metodo. Caso apés 0 Return ainda existissem linhas de cédigo, estas seriam ignoradas, pois o meétodo teria terminado. 5.2 Recebendo Parametros Agora que j4 abordamos e conseguimos receber um retorno de métodos, precisamos enviar dados a0 método. Nos exemplo anteriores o método Mostrar utilizava uma varidvel de nome Contador que ja estava criada em meméria. 5.2.1 Parametros de Entrada (ByVal) Atualizando nosso exemplo, imagine o mesmo método agora recebendo um valor para multiplicar contador: ‘Shared Contador as Ineger ‘Shared Sub Iniciar() Contador += 4 ‘Bim Resutado As Bootean Rosutado = Mostrai2e3) End Sb ‘Método Mostrar ‘Shared Funeton Mesrar(ByVai Mutioslicador As Integer) As Boolean Ty Contador = 1 Contador Mulipicador Retum True catch Rew False End Try End Sub E possivel notar que na definigdo do método consta a lista dos parémetros que serao recebidos, no caso apenas um. Na chamada do método foi informado o valor 223 que sera utilizado para multiplicar 0 contador original. Juntando todos estes conceitos, vamos exemplificar com um formuldrio e duas caixas de texto onde sero digitados dois numeros e os métodos retornaram as operagdes matematicas com os nimeros digitados: Verda 20 wimarcebsincte.com br Piging 26 de 45 Private Sub Button 1_Click(By Val sender As System.Object, ByVal e As System EventArgs) Handles Button.Click Dim Varlavelt As Integer = Cihi(TextBox'. Tex!) Dim Varavet2 As Integer = Cini(TextBox2 Tex!) ‘MsgBox(Somat Variavel', Variavel2).ToSting()) ‘MsqBox(Mutiptca(Variavell, Variavel2). ToSting() ‘MsqBox(DivideVariavel!, Variavel2).ToString)) ‘MsqBox(Subirai(Variavelt, Vanavel).ToStrg ) End Sub ‘Shared Function SomaBy Val Numero! As integer, ByVal Numero? As Integer) As Long Dim Resultado As Long Resuliado = Numerot + Numero? Return lesultaco End Function ‘Shared Function Mutiplica(ByVal Numerot As Integer, ByVal Numere2 As Integer) As Long Dim Resultado As Long Resutado = Numero! * Numero? Retur Resuttado End Function ‘Shared Function Divide(ByVal Numero1 As Integer, ByVal Numero2 As integer) As Long Dim Resultado As Long esutado = Numero! / Numero? Return Resuitado End Function ‘Shared Function Subtrai(ByVal Numero! As Integer, ByVal Numero? As Integer) As Long Dim Resultado As Long Resultado = Numero! - Numero2 Return Resuttado End Function Cada um dos cédigos de métodos acima recebe os dois ntimeros como inteiros e faz 0 calculo devido, retornando um valor do tipo longo. 5.2.2. Parametros Referenciais (ByRef) Outra forma de retomar valores em parametros ¢ utilizar referencial O padrao no VB é receber os dados como valor, 0 que significa que 0 parametro de um método recebe o valor e ndo o ponteiro. Ao utilizar a instrugéo ByRef no lugar ByVal estamos enviando para ‘0 método com parametros 0 ponteiro de meméria onde a varidvel original esté Para simpiificar, um parametro normal sdo duas varidveis, uma original e outra recebida pelo método chamado. Quando utilizamos referencial, a variavel ¢ a mesma no método original e no método chamado. Quando 0 método chamado alterar a variavel esta também alterando no método original Veja no diagrama abaixo coma isto pode ser representado: 4 (aay Go) SS No exemplo com ByVal (in) notamos que a varidvel Nome e retNiome usavam espacos em meméria diferente. individualizando os valores. Ja no modelo ByRef notamos que é um Unico valor em memoria utilizado nos dois métodos. Atualizando 0 exemplo anterior teriamos: Private Sub Buttont_Cliok(B/Val sender As System.Object, ByVal e As System.EventArgs) Handles Button. lick ‘Dim Vanavelt As Integer = Cint{TextBox!. Text) Dim Vanavel2 As Integer = Cint(TextBox2 Text) Soma/Variavelt, Varavei2) “MsgBox(Variavelt. ToSting()) Verda 20 wimarcebsincte.com br Piping 5 de 45 ‘Mutfplica Variavlt, Variavel2) ‘MegBox(Variavelt. ToSting()) Divido(Variavel!, Variavel2) ‘MsgBox Variavelt. ToStang()) Subtrai(Vaniavels, Variave) ‘MsqBox(Variavelt. ToSting()) End Sub Shared Function SomaByfet Numerot As integer, By et Numerc® As Integer) As Long ‘Numero = Numero2 End Function Shared Function Mutilica(®yRel Nimerot As Integer, ByRe! Numero? As integer) As Long ‘Numero? *= Numero2 End Function ‘Shared Function Divide(ByRet Numerot As Integer, ByRet Numero? As Inlager) As Long ‘Numero Numero? Ens Function Shared Function Subtal{yRet Numerot As Integer, Byet Numero? As Integer) As Lang ‘Numero = Numera2 End Function Note que nao necessitamos criar uma variavel de retorno, pois alteramos e mostramos a primeira varidvel, que por ter sido referencial foi atualizada. DICA: A passagem de pardmetros por valor é mais utiizada, pois a performance é melhor, @ ndo afeta as varidveis originais do método. 5.2.3 Parametros Multiplos Em algumas situagées precisamos passar um numero variavel de parametros. Nestes casos podemos utilizar array ou enumerador. No caso de array iremos abranger no médulo seguinte. Quanto ao uso de enumeradores, como j4 mencionado no médulo 2, se torna itl por permitir que seja utilizado parametros nomeados. Quando utilizamos 0 método normal, se um programador passar pardmetros fora de ordem nao temos como detectar. Se for utilizado enumeradores, este risco nao existe. Veja o exemplo: ‘Sructuwe eDades ‘Dim Céchgo As Integer Dim Nome As Sting Dim Tetelone As Sting End Structure ‘Shared Sub nian) ‘Dim MeusDados As Dados MousDados.Cédigo ~ 100 ‘Dim Retorno As Boolesn = Dados(MeusDados) Console WiteLine(MeusDados.Nome + "~" + MeusDados.Telofone) End Sub ‘Shared Function Dacos(ByRef MeusDades As eDados) As Boolean It MeusDados.Cécigo «100 ‘MeusDados.Nome = “Marcos ‘MeusDados. Telotane = "1234-5678" Retum Tue Eke MeusDados.Nome = “Desconhecido’ MeusDadios. Telefone = ** Retu False End it End Function Verda 20 wimarcebsincte.com br Piging 26 de 45 A grande vantagem no modelo alterado acima é que se o programador inverter a ordem dos dados 20 informar os parametros nao fara diferenga, uma vez que cada parametro tem seu nome especificado dentro do conjunto de dados. 5.3 Overload de Métodos ‘Apés um método ser criado e utilizado, a mudanca pode ocasionar problemas, pois as chamadas de um método que contem quatro parmetros ser alierado para receber cinco parametros causaria erro nos cédigos onde eram apenas quatro parametros. Para isso criamos overloads que consiste em ter mais do que uma funcao com o mesmo nome, mas com os parametros alterados. Para isto temos que conhecer o conceito de assinatura de método. Assinatura de método consiste em nome do método, tipo do método, valor de retorno, numero e tipo de parametros. Uma alteragao em qualquer um destes itens alterou a forma como ele deve ser chamado. Pense no exemplo utilizado caso ele sofra alteragdes: Siretu eDacos ‘Dim Godlgo As integer Dim Nome As Sting Dim Telefone As String End Structure ‘Shared Sub Iniciar() ‘Dim MeusDados As Dados MeusDados,Cocigo = 100 ‘Dim Retornot As Boolean = Dados(MeusDados) Dim Retorno2 As Boolean = Dads(MeusDados, ‘07000-0007 Console Writeline(MeusDados.Nome + "~ "+ HeusDados, Telefone) End Sub ‘Shared Function Dacos(ByRef MeusDados As eDacos) As Boolean I MeusDados. Cédigo =100 ‘MeusDados.Nome = “Marcos” MeusDados. Teletane = "1234-5678" Rew Tue ise MeusDadios.Nome = “Desconhecido’ ‘MeusDados. Teletane = *" Rewm False End if End Function ‘Shared Function Dacos(ByRet MeusDacos As eDados, CEP As String) As Boolean If Meus Dados. Coalgo =100 ‘MeusDados.Name = “Marcos* MeusDadios. Telefone = 1234-5678" Reiun Tue Eke MeusDacios.Name = “Desconhecido” MeusDacios.Telofone = ** Rew False End it End Function Note que existem dois métodos chamados Dados, 0 primeiro com um parametro e segundo com dois parametros. Nas execugdes nao precisamos definir qual dos métodos sera executado, pois o proprio CLR se encarrega de escolher o método que se encaixe no modelo de chamada que foi utilizado. Com este recurso podemos ter varios métodos com 0 mesmo nome, mas com uma lista de diferentes parametros. Este recurso é extensamente utilizado no proprio framework, visivel quando digitamos 0 nome do método e aparece uma lista das variagdes que o método possui. Vertu 20 inarcenctecom e Pin 2 ded Uma boa pratica ao utilizar overioad 6 que os métodos chamem uns aos outros, por exemplo, 0 meétodo que recebe quatro parametros 6 0 mais completo é chamado pelo que recebe apenas dois parametros, que chama o de quatro parémetros passando dois parémetros vazios. A este proceso chamamos de métodos recursivos, ou recursividade. Verto: 20 wimarcebsincte.com br Piging de 45 6 Arrays e Parametros 6.1 Definigao Um array nao pode ser comparado a um banco de dados como muito o fazem Um banco de dados é uma estrutura mult-tipos e bi-dimensional. Arrays sao estrutura de um tnico tipo CTS e multi-dimensional Veja o diagrama comparativo: No primeiro diagrama temos um conjunto de linhas com colunas predefinidas, onde para cada linha temos trés colunas especificas e sempre preenchidas, ou seja um plano em 2D. Ja 0 segundo diagrama mostra um conjunto de 10 linhas consecutivas onde para cada linha temos 2 conjuntos diferentes de niimeros nao concorrentes em estrutura 3D. No caso o array seria definido como 10 x 5x 3. 6.1.1. Definindo Arrays Para criar um array lembre-se de que s6 pode conter um tipo. Este deve ser detinido logo na definicao, como a sintaxe abaixo: ‘Dim NomeDaVariave(posicdes) As tipo Como exemplo podemos criar um array que contenha a lista de meses: Dim Mases(11) As String ‘Meses(0) = Jan" Meses(t) = Fev’ ‘Meses/2) = “Mar” ‘MesesiS) = “Abr® Meses(4) = Mai" ‘Meses(S) = un" Moses(é) = ur" Mesesi7) = A Mses(8) ~ “St” ‘Meses(9) = “Out” Moses{10) = "Nov" Meses(t1) = "Dez" Console. WiteLine(Meses(Datetime.Now.Month-1)) Verda 20 wimarcebsincte.com br Piging 9 de 45 DICA: Ao criar os arrays note que definimos 11 posi¢ées, pois os arrays em VB so detinidos nao em numero de ocorréncias, mas no valor do indice que deseja. Para retornar a descrigao do més desejado basta digitar 0 nome da variavel e a posicao desejada, como a ultima linha do cédigo de exemplo. Para criar um array multidimensional a sintaxe é similar: Dim NomeDaVarlvel(Posic&oX, Posic8oY, PoskoZ) As Tro Para criarmos um array similar a uma tabela de cadastro, veja 0 exemplo: ‘Dim Dacos(2,1) As String Dads(0,0) = Joao" Dadoe(0.1) = 223-6767" Daes(1.0) = ozauim Dados(t.1) = 222-4545" Dados(20) = Maria” Dados(21) « 223-1212" Este modelo simula a tabela de cadastro onde utilizamos a primeira posigao para indicar a linha e a segunda posicao para indicar as colunas. A estrutura criada graficamente representada: 6.2 Métodos Comuns Alguns métodos dos arrays sao importantes serem considerados, levando-se como exemplo o array Dados(30, 60) Método Exemplo suid GetLenaih Dados. Geil onaii( 60. Length Dados Lenath 1800, Gowvalue Dados GoiValua(S5) Nome GetType GetType System Stingh] [Tataize Tnsiallze) Recta todas as poses ‘Outro interessante método do array permite utilizar 0 construtor para poder criar o array no momento de definigao. O exemplo abaixo demonstra como fazé-lo: Dim Nmerosi) As Integer = Mew ntegor) {10,2020} (Dim Numeras(,) As Integer = New Integer{,) (10,20,30}. (1.23) Estes dois exemplo criam 0 array jé preenchido, o primeiro com as trés posigdes e 0 segundo exemplo de 3 x 2 posigdes. DICA: No VB podemos redimensionar arrays com a instrugao Redim...With Preserve Verda 20 wimarcebsincte.com br Piping 30 de 45 7 Classes Basicas do .NET Framework 7.1 Classe AppDomain Com esta classe temos acesso a dados importantes do sistema atual. \Veja na tabela abaixo um exemplo utilizando uma aplicacao’ Watodo Resultado ‘AgpDomain CurreniDomain BaseDwrectory Diretério da apicarao ‘AgpDomain.CurrentDomain.FriendlyName Nome do executavel ‘AppDomain.CurrentDomain. Setupinformation ConfigurationF ie ‘Arquivo de confiqurecao da aplicagao ‘Com estes dados podemos saber 0 diretorio onde est o executavel, o nome do sistema sendo executado no momento e onde se encontra a configuragao da aplicacdo. Com estes dados em maos podemos gravar arquivos de configuracao da aplicagao ou ler este que esta no mesmo diretério que 0 executavel. 7.2 Classe Security A classe security é importante para termos informacées sobre o usuario que esta logado na maquina. Essa informagao 6 util para saber se o nome do usuario, em aplicativos onde podemos ler 9 usuario do Windows e utiliza-los mais tarde no momento dos acessos da aplicagao: Método Resultado "System. Securily Principal WindowsIdendiy.GetCurrent()JsAnonymous False ‘System, Security Principal Windowsldentty.GetCurrent()\sAuthenticated True ‘System, Secuniy Principal Windowsidentty GetGurrant() Name since ‘System. Secuniy.Principal Windowsidendly.GetCurrent() Autheriicalion Type NTLM Estes métodos para autenticacao fornecem dados em aplicagées onde utilizaremos o usuario do préprio Windows para controlar 0 acesso ao sistema ‘Também podemos usa-los para gravar logs e acessar banco de dados quando este trabalhar em modo de autenticagao pelo sistema operacional e nao por modelo proprietario. 7.3 Classe lO Aclasse IO é importante para acesso a discos, diret6rios, arquivos e principalmente leitura € gravacao de textos. O exemplo abaixo demonstra como utilizar a classe de leitura e gravacao de arquivos texto: (Gra. um nove arquivo texio informand 0 focal. O true indica que & para acrescentar Dim GravaLog As New System IO. StreamWritor(@"C:Log ot“ tnse) 120 Then Throw New Exception dade Incoreta. ho pldade » Value End End Set End Property Public Function Comer{By¥al Aimento As Sting) As Boolean Verda 20 wimarcebsincte.com br Piping 36.de 45 Mt Almento.Lenath = 0 Then ‘oturn Falco Enait Console. WniteLineEstou comendo (0}", Afmento) Rewn True End Function Public Function Andar(By Val Intensidade As Integer) As Boolean ‘intensidage = 0 Then ‘Return False Enait Console Writline(Estou andando a (0} passas’ Intensdede) Retum True End Function End Class Note que agora Idade pode ser utilizado em Maria como sempre foi, mas internamente a classe agora guarda a idade na variavel pldade e a anterior variavel se transformou em dois métados, sendo 0 primeiro 0 Get, ou seja, quando perguntarmos a idade de Maria com Maria. dade o que ira acontecer é a instrugao Return pidade. Quando alterarmos a idade de Maria com Maria. Idade=20 0 que estamos fazendo é rodando um método Set que recebe uma varidvel Value, no caso com valor 20, € alribui este valor a pldade. Como pidade é Private nao aparece na lista de propriedades de Maria, existindo apenas internamente. Outra forma de validar dados é utilizando o Enum ja visto anteriormente, que gera uma lista de valores possiveis. Vamos implementar Enum na lista de departamentos, limitando os departamentos que podem ser utilizados: Publ Enum ListaDepatamentos As Integer 7 BH Financoiro ‘Adimnistracao End Enum Public Class Pessoas Public Nome As String Pubfe Departamento As ListaDepartamentos Public Enderaco As String O atributo Departamento, antes do tipo string agora é do tipo ListaDepartamentos, portanto, nao pode mais ser colocado nele qualquer valor, mas apenas os quatro tipos definidos. Para informar 0 cédigo de Maria agora seria: i Maria as Now Pessoas() Maria Nome~'Maria Siv ____ Maria Departamento=ListaDepartamentes.[T | | | Utilizando as propriedades e enumeradores conseguimos criar uma classe mais simpatica para uso, com restrigées e valores simples de serem encontrados. 8.2.2 Construtores Ainda outro facilitador a utilizagao de classe sao os construtores. Todas as classes possuem um construtor padrdo vazio, como a seguir: Publ Class Pessoas ‘Sub New) End Sub O método que leva © mesmo nome da classe sem receber parametros é o construtor que ¢ executado quando utilizamos a instrugao Pessoas Maria = new Pessoas(). Verda 20 wimarcebsincte.com br Pigina 57 de 45 Como a classe pessoas possui quatro atributos obrigatorios, podemos reescrever 0 construtor para que no momento do new ja sejam informados. Portanto, o construtor passaria a ser: Public Class Pessoas ‘Sub New(B/Val pNome As Sting, ByVal pOepartamento As ListaDepartamentos, ByVal pEndereco As String, By Val pldade As Integer) ‘Nome = pNome Departamento = pDepartamento Endereco = péndereco laade = pidade End Sub ‘Sub New) End Sub Com este novo construtor podemos continuar utilizando 0 new sem parametros, ou entao podemos agora construir 0 objeto ja com os dados: Dim Maria As Now Pessaas(‘Maria’, ListaDepartamentes.T, ua dos Abroihs", 25) Um bom exemplo de construtor 6 0 Msgbox que possi 12 diferentes construtores com diferentes parametros, utilizando overload. 8.2.3 Destrutores Assim como 0 construtor, também existem os destrutores, métodos que sao executados ao se terminar de usar 0 objeto. Pode ser usado para apagar arquivos tempordrios, fechar conexao e liberar memoria. Construtores podem ser reescritos, destrutores nao. © que podemos é adicionar fungdes ao destrutor usando 0 cédigo a seguir: Publ Cass Pessoas Protected Overrides Sub Finalize) Console. Writel.ine("Ful finalizado") End Sub Um importante aviso sobre destrutores que 0 componente Garbage Collector nao destréi um objeto assim que ele para de ser usado, mas sim quando a maquina requer recursos e aciona o GC. Por isso, vocé nao tera como garantir 0 momento em que seu destrutor ira executar. 8.3 Controle de Aces: idade Acessibilidade ou visibilidade significa quem pode ver uma determinada varidvel ou método criado dentro da classe. Os principais assessores no C# sao: ‘Accesor| Escope visivel Private | Apenas denro do mélodo ou da Gasse om que fo ado, Veja como exemplo a vadivel pldade da Cassa Pessoas cfadas anteromerte. Public | E acessado dentro da dasse e fora da classe para quem a instanciar. Veja como exemplo a variavel Nome @ 0 metodo: roar, [Friend | Pubico dentro do mesmo assemble compilado, mas privado para outros assemblies. ‘Os assessores mais utiizados sao 0 Private para definir métodos e atributos que serao utlizados localmente e Public para os métodos e atributos que precisam ser informados ou executados nos objetos. Verda 20 wimarcebsincte.com br Piging 38de 45 8.3.1 Métodos Compartilhados Outro assessor especial 6 0 Shared. Este tem uma funcao diferente dos anteriores pois ¢ combinado com 0 Public ou 0 Private, dependendo da visibilidade desejada. A grande diterenca do Shared é que a classe nao precisa ser instanciada para que eles sejam utilizados. Um exemplo tipico de métodos estaticos é 0 Show do Msgbox. Nao precisamos instanciar um objeto Msgbox para utilizar seu método Show. Podemos exemplificar por criar uma classe /PVA para calculos: Puble Class IPVA ‘Shared Function GalulalPVA ByVal Aro As Integer, By Val Fator As integer) As Decimal Retum Ano *Fator End Functon Shared Function MutalPVA(By Val Valor As Decimal As Decimal Return Valor * 0.1 End Function End Class Como neste caso tanto 0 construtor quanto os métodos so compartilhados utilizamos diretamente as operacées desejadas, como a seguir: ‘Dim Resuliado As Decimal = PVA. Mula/PVA(S456) DICA: A este modelo de classes chamamos de pattem Singleton. Verda 20 wimarcebsincte.com br Piging 30 de 45 9 Heranga e Polimorfismo Retomando 0 exemplo de veiculos definidos no médulo anterior iremos ver como o conceito de heranga e polimorfismo pode ser bem utilizado. Para uma classe herdar (usualmente chamada de classe concreta) o que outra classe ja implementa a instrugao implements para classes e Inherits para Interfaces, e na seqiiéncia o nome da classe que queremos herdar. Veja o exemplo de codigo a seguir: Interface MoiosDel ocomocao Funston Liga) As Boolean Function Desigar) As Boolean Function Acelerar(By Val Intensidade As Short) As Integer End Inertace Public MustInhert Class Veiculos ‘implements MejosDelocomocao Public Cor As Sting Pubfe Fabricante As String Puble Marea As String Public Modelo As String ube Rodas As integer Function Andar) As Boolean Rewin True End Function Function Frear() As Boolean Rew True End Function Publ Function Acolerar By al Intensidade As Shor) As Inlegor Implements MelasDelocomacao.Acolerar Rew True End Function Publfe Function Ligar() As Boolean implements MelosDeLocomocao Ligar Reiun True End Function Public Function Desiigar() As Boolean implements MeiosDeLocomocao.Desigar Rein True End Function End Class Public Notinhertable Class Biciolotas Inherits Veiculos End Class Public Notinhertable Class Automovols Inherts Veiculos End Olas Public Notinhertable Class Motocicietas Inherits Veiculos End Olas A classe Veiculos implementa os métodos da interface MeiosDelocomocao, enquanto as classes Automéveis, Motocicletas e Bicicletas herdam a classe Veiculos, nao precisando implementar nada para conter os atributos e métados da classe pai. Vela na figura a seguir a utilizagao simples da classe Bicicletas: Verda 20 wimarcebsincte.com br Piping 0 de $5 Os métodos que a classe Veiculas possula, bem como os atributos ja constam no momento em que utilizamos a classe Bicicletas. Agora que entendemos a heranga precisamos definir o que cada classe tem individualmente, alem do que a classe pai herdada j4 possuia. Como em nosso exemplo as classes Motocicletas e Automoveis tinham atributos e métodos proprios, seu cédigo seria: Public Class Automoveis Inherits Veiculos Pubic Motor As Integr Pubhe Function Re() As Boolean Rew True End Function End Class Public Class Motocicletas Inherits Veiculos Pubic Motor As Integer Public Tempos As integer End Class Note que alem dos métodos e treinamentos ja existentes nos veiculos, apareceram tambme 0 meétodo Re e 0 atributo Motor que sao préprios de automéveis. 9.1 Classes e Métodos Protegidas Classes protegidas sao aquelas que nao podem ser herdadas, ou seja, sdo classes concretas finais. Para isto utilizamos 0 assessor de protegao temos as instrugao Notinheritable para a classe Protected para os métodos. A instrugao Notinheritable pode ser usada como a seguir: Public Notinheritable Class Automovels Inherits Veiculos Pube Motor Ae Integer Public Function Re() As Boolean Rew Tus End Function End Class Public Notinhertable Class Motecicietas Inherits Veiculos Verda 20 wimarcebsincte.com br Pigina dt de 45 Pubfe Motor As fnteger Publo Tempos As Infeger End Clase Com esta alteragao nao permitimos que um programador crie uma classe a partir da classe auloméveis ¢ motocicletas, ou seja se eu tentar executar a instrugao abaixo retornara erro: ‘public class Honda Inherits Motocicletas Assim como 0 NotInheritable para protegao da heranga na classe podemos fazer o mesmo rotegendo os métodos de serem alterados por polimorfismo. Para isso utilizamos a instrugéo Protected no método que queremos proteger, como o exemplo abaixo: Public Class Automovels Inherits Veiculos Public Motor As Integer Protected Public Function Rey) As Boolean Retin True End Function End Class Ao utilizar 0 protected acima nao queremos mais a classe protegida, uma vez que neste caso a classe pode ser herdada ou utiizada como classe concreta. A diferenca € que o método Re s6 sera visto em classes herdadas. ‘Se no exemplo acima eu oriar uma nova classe e herdar a classe Automéveis 0 método Re aparecera, mas se eu criar um objeto utilizando a classe Automdveis 0 método Re nao ira aparecer, como o exemplo abaixo: Note que na classe criada que herdou a classe Automdveis o método Re apareceu, mas apenas na classe que herdou, nao sendo visivel a objetos criados a partir da nova classe. 9.2 Polimorfismo Utilizamos polimortismo para alterar 0 método como algo acontece na classe pai. Voltando ao exemplo dos veiculos, imagine que bicicleta também recebeu um método ligar & desligar, mas precisa mudar a forma destes acontecerem: Public hustanent Class Vetules implements MelosDeLocomocao ube Cor As Sring Publ Fabricant As Sting Pubfe Marea As Sting Puke Medoio as Sting Pablo Radas As lnoger Function Ata) As Boolean Verda 20 wimarcebsincte.com br Piping 2 de 45 Rew True End Function Function Froar{) As Boolean Rewmn True End Function Public Function Acolerar (ByVal Intensidade As Short) As Integer Implements MeicsDeLocomecao.Acelerar Rewin Tre End Furetion Public Overridable Function Ligart) As Boolean Implements MeicsDeLocomacao.Ligar Return True End Function Pubic Overridable Function Desigar() As Boolean Implements Meios eLocomocao, Destigar Retum True End Function End Class Public Notinhertable Class Biciclotas Inherits Veiculos Pubfe Overrides Function Ligar)) As Boolean Console. WriteLine “Bicicleias nao podem ser fyadas") MyBase Ligar) End Function Public Overises Function Desigar() As Boolean Console, WiteLineBiciolelas no podem ser desigadas") MyBase.Desigar) End Function End Class Note que os métodos ligar e desligar receberam a palavra chave Overridable que ident ica aquele método como podendo ser reescrito. Na classe Bicicletas os métodos ligar e desligar foram reescritos com a instrugao Override, identificando que irao sobrepor a implementagao original da classe. A chamada Mybase.Desligar() permite que o método desiigar reescrito execute o cédigo original da classe pai, apos rodar 0 cédigo alterado. Vertu 20 vonnmar cence comb Pisin 8 de 45 10 Namespace, Delegates e Eventos 10.1 Namespace Namespaces podem ser utilizados para organizar métodos e classes. Por exemplo, 0 cédigo abaixo cria os métodos com diferentes Namespaces: ‘Namespace Patios ‘Namespace Utitivios Pubic Class Caleulos End Glass Pubic Glass Financelro End Glass End Namespace Namespace Dacos Public Class CarregaXML End Class Public Cass GravaXM Ena Class End Namespace End Namespace Para utilizar as fungdes acima podemos utilizar duas formas. A primeira envolve colocar o aplicativo no mesmo Namespace que estao as classes ou colocar o namespace inteiro na detinigao do objeto: ‘amospace Peltoc. Usitarios public class Taste ‘Dim x As New Calulos/) ‘Classe que esta am outro namespace, dferante da anicacao Dimy As New Poli. Ltitanos.GravaXMiL) End Glass End Namespace A segunda forma, mais utilizada é definir que iré utilizar 0 namespace, como 0 exemplo a seguir demonstra: imports Poltec Unitas imparts Poite Caloulos pubic Sub Testop ‘Dim As New Calulos/) Dimy As Now GravaXt) End Glass A vantagem de utilizar 0 primeiro método de colocar a aplicagao no mesmo Namespace ou com ele completo é que posso ter métodos com o mesmo nome em Namespaces diferentes. Ja com a ulilizagao do Imports se houver métodos com 0 mesmo nome, nao serdo acessados corretamente. 10.2 Delegates Algumas vezes precisamos permitir que um mesmo método chamado pelo programa cliente execute miltiplos métodos diferentes na classe original Por exemplo, caso tenhamos varios métodos diferentes que fazem uma determinada fungao e nao queremos em nosso sistema fazer varias condigdes para chamar 0 método correto, temos um exemplo de delegate. Pensando em nossa classe de veiculos, podemos implementar um delegate Correr que dispara 0 Ligar, Desligar e Correndo usando sempre 0 nome delegCorrer. Veja 0 codigo atualizado: Public Mustinhert Class Veiculos Implements MeosDeLocomocao Verda 20 wimarcebsincte.com br Pigina 48 de 45 Public Delegate Function Correr() As Boolean ube Cor As Sing Puble Fabricante As String Pubfe Marca As String Public Modelo As String Public Rodas As Integer Public Notinhoritable Class Biciolotas Inherits Veiculos Dim delegCorer As Carrer ‘Sub New) elegCorrer = New Correr(AdcressOr BicCorrenco) delegCorrer() delegCorrer = New Correr(AdcressOt Ligar) delegCorrer() delegCorrer = New Correr(AdcressOt Desligar) delegCorrer() End Sub Public Function BicCorrenday) As Boolean Console. WiteLine(‘Biciceias correndo.") End Function Este recurso é muito utilizado para no inicio da aplicagao configuramos 0 delegate com o nome do metodo que ira executar a fungao desejada, e em qualquer lugar do sistema ao invés de comparar novamente qual é 0 método, usamos 0 delegate pois este jd assumiu a fungao. 10.3 Eventos Eventos sao importantes para definir que algo aconteceu. Como exemplo, quando executamos um formulario 0 framework nos permite utilizar um evento Load que acontece todas as vezes que 0 formulario foi lido. O mesmo podemos fazer para que o programador que utilize uma classe saiba que determinada ago na classe aconteceu. Por exemplo, quando o veiculo andar automaticamente um evento chamado EstouAndando acontece na aplicacdo cliente. Para definir um evento, na classe utilize a seguinte Public Mustfahont Class Veiculos Implements MeiasDeLocomacao Public Event EstouAndando() jaxe como o exemplo a seguir: ube Delegate Function Correr() As Boolean Pable Cor As Sting PPubfc Fatricante As Sting Pubic Marca As Sting ube Modelo ae String Puble Rodas As integer Function Andar) As Boolean Raise vent EstouAndando() Rotun True End Function A primeira linha destacada no cédigo acima mostra como criar um evento, e a segunda linha como explodir a execugao do evento no sistema que utilizar esta classe. Na tela abaixo pode ser visto que agora o objeto derivado de bicicletas possui um evento na lista de eventos do VS: Verto: 20 wimarcebsincte.com br Pigina 5 de 45 rennin om | “ po Note que para o evento aparecer na aplicagao foi necessério utilizar a cldusula WithEvents na criagao do objeto. Tara prada tiga ire

You might also like