Introdução à linguagem C#

O que é C#?

É uma das linguagens de programação que fazem parte da plataforma .NET da Microsoft. Foi lançada em 2002 e introduzida na mais nova atualização da suíte para desenvolvedores da Microsoft, o Visual Studio que a partir dai passou a chamar Visual Studio .NET.

A plataforma .NET é uma tecnologia desenvolvida pela Microsoft para criar uma integração maior e mais profunda entre aplicações, o objetivo era facilitar o trabalho dos programadores fornecendo aos mesmos um único ambiente onde poderiam criar aplicações que poderiam ser publicadas e distribuídas nos mais diferentes tipos de ambiente (computadores desktop, servidores web, smartphones etc.)

As atualizações da plataforma .NET (suíte de desenvolvimento e linguagens) é diário, novos recursos e novidades são liberados mensalmente, não ficando mais a linguagem muito tempo sem receber novas versões e atualizações. Antes disso as linguagens de programação ficavam até mesmo anos sem receber grandes recursos e correções.

O .NET é um Framework, uma camada de componentes prontos e preparados para serem utilizados de forma simplificada, não exigindo grande conhecimento do programador os frameworks tem sido o padrão de desenvolvimento atualmente amplamente empregado nos sistemas modernos.

Como iniciar?

Ao obter e instalar o Visual Studio .NET, durante a instalação, todos os componentes e frameworks .NET são instalados na máquina do desenvolvedor. Com a instalação do Visual Studio (a versão mais atual é a 2019) além de instalar o framework obtemos também todas as ferramentas necessárias para trabalhar com todas as linguagens da suíte (F#,C#, Visual Basic, Xamarin Forms etc.).

Clique na imagem para ampliar

Obtendo o Visual Studio

O instalador pode ser obtido em →

http://www.autocom3.online/arquivos/—equipe/vs2015.com_enu.zip

O Visual Studio está disponível em 3 versões a versão Community é totalmente gratuita e funcional, e é  indicada para desenvolvedores autônomos e estudantes. As versões Professional e Enterprise contam com ferramentas extras para grupos e equipes de desenvolvedores para grandes empresas e equipes de desenvolvimento.

Cenários para implantação do Visual Studio .NET.

Clique na imagem para ampliar

Um pouco de lógica para programação

Conhecendo um algoritmo

Programas de computador geralmente são traduções feitas a partir de um algoritmo, um algoritmo é um plano, um projeto para a criação de um programa de computador. Algoritmo é a maneira pela qual organizamos as informações, a fim de passa-las para o computador, ou seja, consiste em um conjunto lógico e finito de ações  (instruções) que resolvem um determinado problema. Um Algoritmo é uma sequência de instruções ordenadas, de forma lógica, para a resolução de uma determinada tarefa ou problema.

Por definição verificamos que algoritmo não se aplica apenas à informática, pode ser caracterizado tanto para uma receita de bolo quanto para montagens industriais. Usamos algoritmos em procedimentos humanos diariamente.

Nenhum algoritmo será completo, normalmente algumas condições serão esquecidas, assim ao se construir um algoritmo o seu responsável deve especificar condições de entrada e saída. Vamos pegar um pequeno exemplo de algoritmo usado em nosso dia-a-dia, como um simples telefonema.

Clique na imagem para ampliar

Iniciando as expressões

Uma expressão é um conjunto de variáveis, operadores, literias e outras expressões que determinam um valor que pode ser numérico, booleano ou string.

Para desenvolvermos os algoritmos e desmembrar as expressões, usaremos uma pseudolinguagem conhecida como “Portugol” ou Português Estruturado.

“Portugol” é derivado da aglutinação de português + Algol. Algol é o nome de uma linguagem de programação extruturada, usada no final da década de 50.

Para a construção de Algoritmos, todas as expressões aritméticas devem ser linearizadas, ou seja colocadas em linhas. Isso devido à leitura que é feita pelo computador.

Clique na imagem para ampliar

Termos e componentes relacionados à programação

Variáveis

Variáveis são endereços de memória, destinados a armazenar informações temporariamente. Todo algoritmo ou programa deve possuir variáveis.

No exemplo apresentado anteriormente (um simples telefonema), declararíamos as variáveis, dizendo ao programa que os valores de entrada e saída, seriam os impulsos telefônicos.

Agora veremos alguns exemplos, pequenos programas. Assim, você pode aprender como eles são implementados, e ficar sabendo quais são as possibilidades dos algoritmos. Vamos começar com um programa muito pequeno que exibe uma mensagem na tela.

Orientação a objetos

Seria necessário um curso inteiro para falar sobre orientação a objeto, visto que este tipo de tecnologia deixa de lado a tradicional lógica de programação procedural e apresenta um novo conceito. Vamos conhecer os fundamentos básicos da orientação a objeto.

Princípios

O .Net Framework é totalmente orientado a objeto. Não apenas permite a utilização de objetos, mas depende disso. Praticamente tudo o que você precisa para criar uma aplicação é, de alguma forma, realmente um tipo de objeto.

Mas o que são objetos?

Definição

Imagine que você compre uma televisão. Supondo que você não conheça eletrônica, você não saberá o funcionamento dela, ou seja, os atributos. Porém todos os televisores tem muitos aspectos físicos em comum, apesar de diferentes, assim como funcionamento, ou seja, na parte “externa” os televisores podem ser alterados. Esse é o conceito de ENCAPSULAMENTO. Podemos, então, dizer que uma “televisão” é uma CLASSE, que possui propriedades, métodos e eventos. Cada “aparelho de televisão” é uma instância da classe televisão, que herda as suas propriedades, métodos e eventos. Esse é o conceito de HERANÇA em orientação a objeto. Ainda existe o conceito do POLIMORFISMO, que consiste na instância poder ter mais de um método com assinaturas diferentes, por exemplo. Esses conceitos ficarão mais claros no decorrer do curso, onde utilizaremos na prática.

Propriedades

Propriedades são partes do objeto onde ele receberá valores que determinarão seu comportamento.

Utilizando o exemplo do objeto “televisão”, podemos ter a propriedade “tipo”, que pode ser LCD, Plasma ou LED.

Também podemos ter a propriedade “Tamanho”, que determinará as polegadas da tela, e assim por diante.

Métodos

Métodos são simplesmente procedimentos que seu objeto irá fazer internamente e retornará um resultado útil. Métodos
são amplamente utilizados em orientação a objeto. Do nosso exemplo da televisão, um método poderia ser “PassarEnergia”
quando ligamos o aparelho.

Eventos

Evento é algo que pode ser acessado externamente ao objeto. É muito parecido com o método. Um exemplo seria “AoLigar”
da televisão. Isso irá disparar uma sequência de processos no objeto, por exemplo, o evento “AoLigar” chama o método
“PassarEnergia”.

Introdução ao C#

Escolher a linguagem em que você irá desenvolver no .NET framework é uma coisa simples. Muitas pessoas que já tem alguma experiência com programação com linguagens como o visual basic por exemplo irão preferir o VB.NET, algumas pessoas que tem intimidade com o COBOL desejarão programar em COBOL.NET.

Porque então utilizar o C#?

Segundo a Microsoft, independente da linguagem utilizada, não haverá impactos em performance, interoperabilidade, tempo de desenvolvimento das aplicações, entre outros.

O C# consegue pegar a robustez do C++ com a facilidade de programação do Delphi, visto que o criador deste último também é o criador do C#. É uma linguagem com marcações fortes, onde você deve definir o início e o final, bem como encerrar linhas com um caractere específico.

Quem não está acostumado ao C# irá estranhar no começo o intenso uso de ponto-e-virgula(;) no final, as aberturas e fechamento de chaves ({}) e contra barras (\).

Após se acostumar, isso será um mero detalhe.

Princípios Básicos

Existem quatro especificidades que você deve saber ao começar a programar em C#:

É uma linguagem case sensitive; comentários; caracteres terminal; e blocos.

Case Sensitive

O C# é uma linguagem que utiliza o padrão Case Sensitive. Isso significa que ele diferencia as letras maiúsculas das letras minúsculas. Portanto, tome cuidado no hora de escrever a aplicação. Se estiver acusando erro e não compilar, pode ser por causa de uma letra que está em padrão diferente. Por exemplo, uma variável com o nome VAR é diferente de uma com o nome var, e diferente de Var.

Comentários

Comentários são trechos do código fonte onde as informações existentes nele são ignoradas pelo compilador, ou seja você pode adicionar alguma informação dentro do código, por exemplo, para explicar alguma função, e quando o compilador verifica que se trata de um comentário, ele não o inclui na compilação.

Existem 3 formas de se inserir comentários em um código C#:

Utilizar duas barras // – aplica-se somente à linha em que são inseridas as duas barras, e após a sua colocação:

//Esse é um trecho de código comentado

Trecho de código; //A partir daqui é um comentário.

-Abrir com /* e fechar com */ – esse tipo de comentário faz com que um bloco de várias linhas possam ser comentadas:

/* Esse é um comentário
de várias linhas*/

-Utilizar três barras /// – esse tipo de comentário é utilizado para gerar a documentação em formato XML, e também para poder indicar que este comentário aplica-se àdeterminada classe, método, parâmetro, etc.

///<sumary>

///este método apaga o arquivo selecionado

///<param name=“arquivo”>nome do arquivo a ser apagado</param>

///</sumary>

Caractere Terminal

Toda linha de código em C# deve ter a marcação do ponto-e-vigula (;) para terminar. Caso você omita esse caractere, o código entenderá que a instrução não foi finalizada, e seguirá lendo as demais linhas. Isso pode ser bom por um lado, onde você pode distribuir seu código para melhor visualização, porém é de suma importância que você não esqueça de colocar o ; no final da instrução.

//Código em apenas uma linha

minhaVariavel = valor1+valor2+valor3;

//Código dividido em três linhas

minhaVariavel = valor1+
valor2+
valor3;

//Código com erro. Notem que não tem o ; no final do valor3

minhaVariavel = valor1+valor2+
valor3

Blocos

Amplamente utilizada na linguagem C#, Java e C, as chaves ({}) demarcam o inicio e o final dos blocos. Todo método, função, looping , entre outros, tem que ter delimitado onde começa e onde termina.

Para isso são utilizados os blocos (chaves). No decorrer do curso irá ver o quão importante são essas demarcações.

{
//Aqui vai o seu código
}

Classes

O estudo da orientação a objeto assusta muitas vezes, porém se você conseguir absorver o conceito em si, não será difícil entender.

As classes nada mais são que os modelos, as formas dos objetos, ou seja, o que o objeto poderá fazer, Ela consiste em métodos, propriedades e eventos. Ou seja, o que o objeto poderá fazer. Ela consiste em métodos, propriedades e eventos. Ou seja, o caminho inverso, um objeto é uma instancia de uma classe, que terá os mesmos métodos, propriedades e eventos.

Escopo de Classe

A classe pode ser declarada como publica, privada ou protegida:

-Publica – sem restrição de acesso.
-Private – a classe somente é acessada no contexto onde foi declarada.
-Protected – a classe somente é acessível pela sua própria classe ou por suas classes derivadas.

Variáveis e Constantes

Quando você utiliza aplicações, você realmente não se importa como os dados da aplicação são armazenados, simplesmente o faz. Entretanto como um programador, você tem que pensar sobre isso. Qual o tipo de dados o usuário irá inserir? Será texto, número, datas ou qualquer outra coisa?

Isso importa porque como você armazena os dados internamente em sua aplicação, afetará não somente como você irá ligar os dados, mas também o que você poderá fazer com esses dados. Para armazenar dados internamente, são utilizadas variáveis, e as variáveis tem tipos. Por exemplo , tem um tipo de dados chamado string. Não surpreendentemente, é utilizado para armazenar dados de texto. Tem um tipo de dados chamado Date para datas e horas, um tipo integer para números e um tipo decimal ou double para números flutuantes. Cada um tem diferentes características: o tipo integer pode somente armazenar números inteiros, e tentar armazenar outro tipo de dados em uma variável integer irá provocar um erro.

Tipos de Variáveis

Os tipos de dados são:

Boolean Utilizado somente para armazenar valor true ou false. O padrão é false.
Byte Utilizado para um único byte de dados. Pode ser um único caractere ou um numero entre 0 e 255
Char Utilizado para dois bytes de dados. Pode ser um caractere ou um numero de 0 a 65.535.
Date Utilizado para armazenar datas e horas.
Decimal Utilizado para armazenar valores decimais. Suporta até 29 dígitos significantes, e é o mais indicado para números financeiros.
Double Utilizado para números flutuantes.
Integer Utilizado para números inteiros entre -2.147.483.648 e 2.147.483.647
Long Utilizado para números inteiros entre -9.223.372.036.854.775.808 e 9.223.372.036.854.775.808
Object Utilizado para representar objetos.
Sbyte Utilizado para armazenar números inteiros entre -128 e 127.
Short Utilizado para armazenar números inteiros entre -32.768 e 32.767.
Single Utilizado para armazenar números com ponto flutuante que não requerem um tamanho máximo de double.
String Utilizado para armazenar texto.
Uinteger Utilizado pra armazenar números inteiros entre 0 e 4.294.967.295.
Ulong Utilizado para armazenar números inteiros entre 0 e 18.446.774.073.709.551.615.
Ushort Utilizado para armazenar números inteiros entre 0 e 65.535.

Declarando variáveis

Para declarar variáveis devemos colocar o tipo da variável seguida do nome da mesma. Como vimos anteriormente, o C# é uma linguagem que é Case Sensitive, ou seja, diferencia letras maiúsculas de letras minúsculas. Então tome cuidado quando declarar as variáveis, e também quando for utilizá-las, para que não ocorra um erro rodar o programa.

Ex:

//declaração de variáveis como exemplo

Int idade;

String nome;

DateTime nascimento;

Decimal valorSalario;

Lembre-se sempre que para poder utilizar as variáveis em sua programação elas precisam ser inicializadas. Par fazer isso, você pode tanto inicializa-las depois da declaradas, ou mesmo inicializa-las na declaração, como o exemplo abaixo:

//utilizando inicialização separada de declaração

Int idade;
idade = 10;

//utilizando inicialização na própria declaração
int idade = 10;

Para inicializar variáveis com o valor mínimo, podem ser utilizados os valores padrões, por exemplo:

//inicializando uma string em branco
string nome = string.empty;

//inicializando um inteiro com o valor mínimo
int numeroUnidade = int.MinValue;

Escopo das variáveis

As variáveis podem ser utilizadas por toda a aplicação, somente por aquele arquivo onde estão sendo declaradas, somente pelo procedimento onde se encontram, ou mesmo somente pela estrutura de repetição.

Para utilizar uma variável em toda a aplicação, deve-se declarar a variável fora do procedimento, mas dentro da classe como public.

Para utilizar somente no arquivo, declara-se como private dentro da classe.

No caso de somente utilizar no procedimento, deve-se declarar dentro do procedimento. Em estruturas de repetição, como veremos a seguir, a variável pode ser declarada internamente e , nesse caso, somente será utilizada por aquela estrutura.

Operadores Aritméticos

Operadores aritméticos são os comumente utilizados para a realização de cálculos matemáticos. São eles:

Adição + x+y
Subtração x-y
Multiplicação * x*y
Divisão / x / y
Potenciação ^ x ^y
Resto de divisão % x % y
Incrementador ++ x++
Decrementador x–

Precedência de Operadores

Quando efetuamos cálculos matemáticos, a ordem em que são feitas as contas influenciam bastante no resultado final. Por padrão, primeiro são feitas as contas de multiplicação e divisão, depois a soma de subtração.

Como exemplo, nós temos que somar 2 ao número 5, e depois multiplicar por 2. Isso irá resultar no número 14 (2+5=7 -> 7*2=14).

O comum, é pensar na expressão desta forma: 2+5*2. porém , neste caso, o resultado seria 12, e não 14.

Para evitar esses imprevistos, são utilizados parênteses nas operações.

(2+5)*2=12

Funções matemáticas avançadas

Existem algumas funções que são predefinidas na programação em C#, para facilitar os cálculos mais complicados. Seguem abaixo alguns exemplos:

//inicio do nosso teste
int meuValor;
meuValor = Math.Sqrt(121); //meuValor=11
meuValor = Math.Round(42.558,2);//meuValor=42.56
meuValor = Math.Abs(-23);//meuValor=23
meuValor = Math.Log(24,212);//meuValor=3,18…
meuValor = math.PI;//meuValor=3.14…

Conversão de Valores

Muitas vezes é necessário a conversão de valores. Isso é especialmente verdade quando o usuário insere dados, como em um formulário por exemplo. A razão disso é que tudo o que o usuário digita , a priori, é reconhecido como texto. Por exemplo, ele digita um número para algum cálculo, esse número é reconhecido como texto, e deve ser convertido para o formato correto, no caso numérico, para que o programa consiga fazer os cálculos, e não ocorrer nenhuma exceção. Da mesma forma, depois de feito o cálculo, o resultado é numérico, e é necessário converter em texto para que seja mostrado ao usuário.

Para converter algum valor em texto, somente é necessário colocar .ToString() no final, como mostrado abaixo:

//conversão direta da variável numérica meuValor para string armazenando em meuTexto
string meuTexto = meuValor.ToString();

No caso de conversão para inteiros, seguem os exemplos:

int numero_1 = Convert.Toint16(texto);
int numero_2 = Convert.Toint32(texto);
int numero_3 = Convert.Toint649texto);

A diferença entre int16, int32 e int64 é o tamanho do valor que o campo aceita. No caso de int64 é considerado long.

Exemplo de conversão de números flutuantes:
decimal flutuante = Convert.ToDecimal(texto);

Exemplo de conversão de datas:
DateTime dataAtual = Convert.ToDateTime(“02/06/2019”);

Operadores Lógicos e de Comparação

Os operadores lógicos e de comparação são amplamente utilizados nas estruturas de decisão e repetição. Eles fornecem a base para que a aplicação decida qual caminho deve tomar. Operadores de comparação sempre envolvem uma expressão a ser avaliada.

O resultado, invariavelmente sempre será True ou False.

Maior > x > y
Maior ou Igual >= x >= y
Menor < x < y
Menor ou Igual <= x <= y
Idêntico == x == y
Diferente != x != y
AND (E) && x && y
OR (OU) || x || y
NOT (NÃO) ! x = !y

Estruturas de Decisão

Em toda aplicação um pouco mais elaborada, as estruturas de decisão estão presentes. Elas indicam qual caminho, ou qual código a ser executado diante da resposta de um teste lógico. Como vimos em Operadores Lógicos e de Comparação, o resultado sempre será True ou False.

Existem basicamente duas estruturas de decisão padrões: IF… THEN… ELSE e SELECT CASE.

No C# a primeira estrutura tem a seguinte sintaxe:

if(teste_logico1)
{
//código a executar se teste_logico1 retornar TRUE
}else{

if (teste_logico2)
{
//código a executar se teste_logico2 retornar TRUE
}else{
//código a executar se teste_logico2 retonar FALSE
}
}

Observe também que os blocos são demarcados com { } , significando abertura e fechamento do bloco. Muitos erros de programação tem suas causas no esquecimento destes detalhes das chaves.

Já a estrutura SELECT CASE, no C#, recebe o nome de SWITCH. Sua estrutura segue o modelo abaixo:

switch(mVAR)
{
case “A”:
//Código a ser executado se mVAR == A
break;
case “B”:
//Código a ser executado se mVAR == B
break;
case “C”:
//Código a ser executado se mVAR == C
break;
default:
//Código a ser executado
break;
}

Neste exemplo foi utilizado comparação com textos (por isso estar entre aspas), mas pode ser feito comparações com números. Neste caso, a estrutura case ficará da seguinte forma:

case 99:
//Código a ser executado se variável ==99
break;

Importante notar que, além das chaves delimitarem o bloco de código que estará sendo comparado, entre casa condição existe a palavra “break”. Isso significa que após ter executado o código pertencente àquela condição, ele irá sair da estrutura SWITCH.

No caso de não encontrar nenhum valor correspondente, ele executará o código que estiver dentro da condição “default”.

Estruturas de Repetição

Muitas vezes precisamos repetir um trecho de código, que podem ser várias linhas, até chegar a uma determinada condição.
Para esses casos, existem as estruturas de repetição. Essa estrutura nada mais é do que repetir determinado trecho de código até que a condição seja declarada como FALSE.

Existem 4 estruturas de repetição básicas:

for(int i = 0; i <= 10; i++)
{
//Código a ser executado
}

foreach(var item in collection)
{
//Código a ser executado
}

while (teste_logico)
{
//Código a ser executado
}

do

{

//Código a ser executado

}while(teste_logico)

Procedures x Functions

Muitas vezes confundimos toda rotina como sendo uma função da aplicação. Porém essas rotinas estão divididas em dois tipos específicos: Procedures e Functions.

Procedures são rotinas que não retornam valores. Elas executam algum procedimento, algum cálculo mas não são obrigadas a retornar algum tipo de dado a ser utilizado em outra rotina.

Private void ConectarBanco()
{
//rotina de conexão do banco de dados
}

Já as funções, necessariamente, retornam valores. Tanto é verdade, que quando declaramos as funções no C#, devemos indicar o tipo de retorno delas, e sempre irão terminar com a linha de  retorno:

private int Soma()
{
int valor;
//código a ser executado
return valor;
}
Tanto as funções como as procedures possuem níveis de acesso. São eles:

Private: significa que outras partes do código não podem acessar, somente a classe em que forem inseridas;

Protected: é bem semelhante ao nível Private, com uma pequena diferença – qualquer coisa que é declarada como Protected permanece com o código oculto fora da classe, mas as classes herdadas da classe base podem visualizar.

Public: pode ser acessada de qualquer lugar do código;

Static: é um dado que é compartilhado entre todas as instâncias de uma classe, ao invés de ser duplicado para cada instância.

Arrays

Array é um agrupamento de variáveis do mesmo tipo, que é tratado como se fosse um objeto. Um array permite que você ordene ou mude uma variável sem ter que fazer isso com todos os objetos.

Para declarar um array, você utiliza o mesmo método das variáveis, com o nome e tipo:

string[] meses; //declarando o array
meses = new string[12];//definindo o número de posições
meses[3] = “Abril”; //atribuindo o valor ao quarto item do array

É importante salientar que o índice do array sempre começa com o número 0, ou seja se você tiver 4 posições no array, elas serão meuArray[0], meuArray[1], meuArray[2] e meuArray[3].

Também é possível utilizar arrays multidimensionais (ou se preferir, matrizes), em um nível mais avançado de programação. Os arrays multidimensionais permitem que se armazene informações em diferentes níveis. Para declarar um array multidimensional, acrescente “,” entre as posições e para popular é somente referenciar a posição:

Int[,] array2d;
int[,,] array3d;
array2d = new int[2,2];
array3d = new int[2,3,4];
aray2d[0,1] = 20;
array2d[1,1] = 15;
array3d[0,1,2] = 10;
array3d[1,1,0] = 8;

Generics

A classe de genéricos é uma inovação do .NET Framework 3.5. Com ela, as classes que não são conhecidas no tempo de compilação, não precisam ser baseadas na classe OBJECT. São utilizadas a classe Generic e substituído a chamada conforme o que necessitar.

Isso gera um grande ganho em performance, segurança de tipos e reuso de código binário.

List<int> minhaLista = new List<int>;
minhaLista.Add(3);
int numeroVar1 = minhaLista[0];
foreach(int numeroVar2 in minhaLista)
{
Console.WriteLine(numeroVar2);
}

Tratamento de Erros

Erros acontecem, e nem sempre é o programador que erra quando está codificando. Muitas variáveis de ambiente podem ocasionar o erro, como uma entrada inválida por parte do usuário, por exemplo.

Por esse motivo, é de vital importância que o desenvolvedor da aplicação utilize os tratamentos de erro, para que o fluxo da aplicação não se interrompa, e o programa consiga atingir seu objetivo.

Bloco Try Catch Finally

Esse é o conjunto de tratamento de erro mais utilizado. O fluxo do programa está contido no bloco try. Se nenhum erro ocorrer, ao final da execução, ele passa para o bloco Finally. Caso ocorra algum erro quando estiver no bloco Try, o programa passa a utilizar o código que está no bloco Catch. Ao final do bloco catch, o programa executa o que está contido no bloco Finally.

Exemplo:
try
{
//trecho com o código a executar
}catch{
//trecho onde o código entra se ocorrer algum erro para tratamento
}finally{
//trecho executado oobrigatoriamente após o bloco try, ou após o bloco catch
}

Pode ser omitido o bloco finally, pois ele é opcional. Da mesma forma, pode ser omitido catch, porém não é recomendado.

Se o bloco catch, pode ser adicionado quantos forem necessários, e pode tratar diversas exceções, por exemplo:

try
{
//execução do código
if (Overflow == true)
{
//throw new OverFlowExeption();
}
//mais processamento
if(OutofBounds==true)
{
throw new indexOutOfRangeException();
}
//caso contrário, continua a esecução
}
catch (IndexOutOfRangeException ex)
{
//tratamento de erro para index out of range error
}
finally
{
//bloco de código final
}
}

 

Print Friendly, PDF & Email

Sobre o Autor