Académique Documents
Professionnel Documents
Culture Documents
Obrigado.
O que a linguagem
Tipos de dados
Vetores
Input/Output
Laos de Repetio.
Funes
Parmetros
Ponteiros
Recursividade
Using e Namespace
Converso de Dados
Operador New
Tratamento de Erros
Framework.Net
C# (L-se C Sharp) uma linguagem de programao multi-paradigma, assim como C++ e
Object Pascal. Uma linguagem multi-paradigma pode ser puramente procedural,
puramente orientada a objetos ou pode conter elementos de ambos paradigmas, como
nessa linguagem.
O nome C Sharp foi inspirado em notao musical, onde um sustenido indica que a nota
escrita deve ser feita um semitom mais agudo. Este semelhante ao nome da lngua de
C++, onde "++" indica que a varivel deve ser incrementado por 1.
Devido a limitaes tcnicas do display (fontes padro, navegadores, etc) e o fato de que o
smbolo sustenido (U+266F SMBOLO MUSICAL (HTML: &9839;)) no est presente no
teclado padro, o sinal de nmero (U+0023 # JOGO DA VELHA (HTML: #)) foi escolhido para
representar o smbolo do sustenido no nome escrito da linguagem de programao [8] Esta
conveno refletida no ECMA-334 C # Language Specification [6] no entanto, quando ele
.. prtica para faz-lo (por exemplo, na publicidade ou na caixa de arte [9]), a Microsoft
usa o smbolo musical pretendido.
Essa linguagem foi desenvolvida pela Microsoft no mbito da sua iniciativa .NET e
posteriormente aprovada como padro pela Ecma (ECMA-334) e ISO (ISO/IEC 23270:2006).
C# uma das linguagens de programao projetadas para a Common Language
Infrastructure (CLI).
CLI uma especificao aberta desenvolvido pela Microsoft e padronizada pela ISO e ECMA
que descreve o cdigo executvel e ambiente de execuo runtime que formam o ncleo
da Microsoft .NET Framework e implementaes Mono e Portable .NET, que so se cdigo
livre e aberto. A especificao define um ambiente que permite que vrias linguagens de
alto nvel possam ser usadas em diferentes plataformas de computador sem ser reescrito
para arquiteturas especficas.
Desde 2002, C# vem melhorando ao decorrer do tempo, hoje essa linguagem j est na sua
verso 5.0 e a Microsoft no v ainda razo para descontinu-la.
C# pode ser usada para todos os tipos de aplicaes que vo desde jogos de computador,
servios pblicos, sistemas operacionais e compiladores. H tambm aplicativos baseados
na web que rodam na plataforma asp.net.
Em C#, assim como em e Java, os principais tipos de dados so: inteiro, real, caractere,
logico e string (Um vetor de caracteres). Esses tipos de dados naturais da linguagem, so
utilizados quando se quer armazenar um valor qualquer. A linguagem C# (diferentemente
do ANSI C), aceita a declarao de varveis em qualquer parte do cdigo.
Para se declarar uma varivel, basta que declaremos o tipo dela e o nome que deve
comear com uma letra ou com um _, o nome da varivel somente pode conter letras,
nmeros ou _.
Exemplo:
char caractere;
Em C#, o ndice comea em zero. Isso significa que o primeiro item de um vetor
comea na posio 0. A posio do ltimo item em um vetor ter um total de nmero
de itens - 1. Ento, se um vetor tem 10 itens, o 10 item est na 9 Posio.
Vamos dar uma olhada em simples declaraes de vetores em C#. O seguinte trecho
de cdigo define um simples vetor dinmico de tipos inteiros que no tem um
tamanho fixo.
int[] intArray;
Como voc pode ver a partir do trecho de cdigo acima, a declarao de um vetor
comea com um tipo de vetor seguido de um colchete ([]) eo nome do vetor.
O seguinte trecho de cdigo declara um vetor que pode armazenar 5 itens somente a
partir de ndice de 0 a 4.
int[] intArray;
intArray = new int[5];
O seguinte trecho de cdigo declara um vetor que pode armazenar 100 itens a partir
de ndice de 0 a 99.
int[] intArray;
intArray = new int[100];
No trecho de cdigo anterior, vimos como definir um vetor simples do tipo inteiro. Da
mesma forma, podemos definir vetores de qualquer tipo, tais como double, char e
string.
Em C#, vetores so objetos. Isso significa que declarar um vetor no cria um vetor.
Depois de declarar um vetor, voc precisa instanciar um vetor usando o operador
"new".
O seguinte trecho de cdigo define vetores de tipos de dados double, char, bool e
string.
Uma vez que o vetor declarado, o prximo passo inicializar um vetor. O processo
de inicializao de um vetor inclui a adio de dados reais para o mesmo.
Este mtodo til quando voc sabe o item que voc deseja acessar a partir de um
vetor. Se voc tentar passar um item de ndice maior do que os itens de srie, voc
receber um alerta de erro.
string[,] mutliDimStringArray;
Agora vamos ver exemplos de matrizes dinmicas, onde voc no tem certeza do
nmero de itens da matriz. O seguinte trecho de cdigo cria duas matrizes sem limite.
Voc tambm pode omitir o operador new como fizemos em vetores unidimensionais.
Voc pode atribuir esses valores diretamente sem usar o novo operador. Por exemplo:
int[,] numbers = { { 1, 2 }, { 3, 4 }, { 5, 6 } };
string[,] names = { { "Rosy", "Amy" }, { "Peter", "Albert" } };
O seguinte trecho de cdigo mostra como acessar varios nmeros definidos no cdigo
acima.
Console.WriteLine(numbers[0,0]);
Console.WriteLine(numbers[0, 1]);
Console.WriteLine(numbers[1, 0]);
Console.WriteLine(numbers[1, 1]);
Console.WriteLine(numbers[2, 0]);
Console.WriteLine(numbers[2, 2]);
Para se entrar com um dado, necessrio que se crie uma varivel, onde o
dado ser armazenado, e se use das funes Read() ou ReadKey ou ReadLine(). Cada
uma tem uma utilizao distinta e esto no namespace System.IO (ser explicado mais
sobre classes no decorrer da apostila).
Essa funo serve para ler o prximo caractere de fluxo de entrada padro. Sua
sintaxe :
Essa funo aguarda at que o usurio pressione uma tecla. Esta funo
muito utilizada quando utilizamos aplicaes console queremos fazer com que o
programa pare em um determinado ponto para que possamos analisar os dados que
esto sendo impressos. Sua sintaxe :
public static ConsoleKeyInfo ReadKey(bool intercept)
A funo ler uma linha que o usurio digitar (uma sequencia de caracteres) e
retorna para uma varivel que esteja sendo igualada a ela. Por exemplo:
Sua sintaxe :
Seu retorno uma string com todos os caracteres digitados pelo usurio
antes de pressionar ENTER.
Para imprimir um numero ou uma varivel, basta fazer uma das sintaxes
abaixo:
//Declarando variveis.
string nome = "Usuario";
int idade = 10;
/*
Imprimindo variveis e testando sobrecarga do mtodo
Console.Write();
*/
Console.WriteLine(nome);
Console.WriteLine(idade);
Console.WriteLine("Meu nome : {0}",nome);
Console.WriteLine("Meu nome : "+nome);
Comentrios tem a funo de deixar seu cdigo mais legvel. Quando se escreve
um algoritmo hoje, a probabilidade de voc no se lembrar, daqui h um ms, o que
um trecho do seu cdigo faz muito grande. H tambm o fato de tornar seu cdigo
mais legvel para as pessoas que iram l-lo, seu chefe ou mesmo um outro
programador que esteja trabalhando na mesma equipe que voc. Sem comentrios,
poderia ser necessrio ler todo o cdigo para que se entenda somente uma linha e
mesmo assim, pode ser que o prprio desenvolvedor no entenda-a. Para prevenir
tais incmodos, utiliza-se comentrios.
Estruturalmente, se tem:
if (condicao)
{
/*
trecho de codigo
*/
}
Podem ser comparaes ou ate mesmo variveis do tipo bool (varivel logica).
Veja os exemplos:
bool condicao = true;
int numero = 10;
if (condicao)
{
Console.WriteLine("Primeira Condicao");
if (numero == 2)
Console.Write("Segunda Condicao");
}
Os operadores lgicos do C# so: == (igual), != (diference), >(maior que), <
(menor que), >= (maior ou igual que) e <=(menor ou igual que).
Pode-se ainda conjugar duas condies. Fica assim:
A conjuno serve como o E na lngua portuguesa, ele serve para unir duas
conjunes e somente torna toda a expresso verdadeira se ambos os termos da
expresso forem verdadeiros.
A negao, como o prprio nome sugere, serve para negar uma conjuno. Se
ele era falsa, se torna verdadeira e se verdadeira se torna falsa.
Os operadores matemticos, so + (soma), - (subtracao), / (diviso), * (multiplicao) e
% (resto) e Podem ser utilizados em qualquer situao.
H ainda os operadores do tipo ++, --, += e -=. Estes operadores funcionam da seguinte
forma:
a += b; a mesma coisa de a = a + b;
O operador ternrio serve para realizar uma comparao e uma atribuio,
dependendo do resultado da comparao. Sua estrutura a seguinte:
Exemplo:
//declarao de variveis
int maioridade = 0;
int idade1 = 20;
int idade2 = 30;
//operador ternario para atribuio
maiorIdade = (idade1 > idade2) ? idade1 : idade2;
Laos de repetio servem para realizar um mesmo trecho de cdigo enquanto uma
condio for valida.
Este lao, realiza uma repetio num bloco de comandos (um trecho de cdigo, entre
chaves) enquanto uma condio for verdadeira. Sua sintaxe a seguinte:
while(condio){}
Veja o exemplo:
/*
*
* Este algoritmo vai imprimir todos os
* valores pares entre 0 e 10
*
*/
//declarao de variveis
int i = 0;
//lao de repetio
while (i <= 10)
{
if (i % 2 == 0)
{/*
* se o resto da diviso por 2 for igual a 0, ou seja, se o
* numero for par, ento imprima o nmero.
*/
Console.WriteLine(i);
}
i++;
}
O do-while funciona semelhantemente ao while. A nica diferena que no while a
comparao feita logo no incio e no do-while a comparao feita somente no final. O que
isso significa? Simplesmente significa que no while no feito nenhum lao caso a condio
no seja satisfeita e j no do-while feito no mnimo um lao antes que a condio seja
satisfeita. Faa dois programas com condies falsa, um com while e um com do-while e
verifique os resultados.
Sintaxe:
do{}while(condicao);
Este lao mais utilizado quando se sabe o numero de interaes que se pretende
fazer. Por exemplo para contar de 0 at 10, mais aconselhvel usar este lao do que o while
ou o do-while.
Sintaxe:
Exemplo:
int i;
Saida no console:
Funes so blocos de cdigos que servem para fazer uma coisa especfica. Por
exemplo, a funo System.Console.Write() serve para escrever algo na tela.
Implementar uma funo significa fazer um trecho de cdigo que faa uma
determinada ao.
//cdigo
return retorno;
//retorno da funo
return resultado;
}
Serve para dizer quais classes podem acessar ou no a funo. Isso ser
explanado com mais detalhes mais h frente. O importante agora saber que esse
modificador d ou no visibilidade dentro de um objeto ou uma classe sobre a funo.
o algoritmo que ser executado toda vez que a funo for chamada.
Isso implica que passando um parmetro por valor, ele quando alterado
alterado somente dentro da funo que o utiliza. J na passagem por referncia ele
altera os valores dentro da funo e em todo o programa.
Quando passados por valor, as variveis da funo recebem uma cpia idntica
do parmetro. Caso passado um vetor, o vetor copiado exatamente do mesmo jeito,
todos os valores do vetor que esto na funo chamadora sero os mesmos que
estavam na chamada. A grande diferena que mesmo que a funo chamada
modifique o valor de uma varivel, o no ser modificado na funo chamadora.
Vejamos o exemplo:
class ParametroValor
{
/**
* Definio: Funo soma que retorna o resultado da soma de dois
* nmeros inteiros.
*
* @parmetros: dois nmeros que sero somados.
* @retorno: a soma dos dois nmeros passados por parmetro.
*
*/
public static int soma(int numero1, int numero2)
{
//varivel que armazenar o resultado
int resultado = 0;
//operando a soma dos dois nmeros inteiros
resultado = numero1 + numero2;
//retorno da funo (varivel local)
return resultado;
}
//Entrada de dados
Console.WriteLine("Entre com o primeiro numero: ");
numero1 = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Entre com o segundo numero: ");
numero2 = Convert.ToInt32(Console.ReadLine());
//Processamento
resultado = soma(numero1, numero2);
//Sada
Console.WriteLine("{0} + {1} = {2}.", numero1, numero2,
resultado);
Console.ReadKey();
}
}
/*
* funo principal que ser a chamadora
* da funo void soma(int int, ref int);
*/
static void Main(string[] args)
{
//Declarao das variveis
int numero1;
int numero2;
int resultado = 0;
//Entrada de dados
Console.WriteLine("Entre com o primeiro numero: ");
numero1 = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Entre com o segundo numero: ");
numero2 = Convert.ToInt32(Console.ReadLine());
//Processamento
soma(numero1, numero2,ref resultado);
//Sada
Console.WriteLine("{0} + {1} = {2}.", numero1, numero2,
resultado);
Console.ReadKey();
}
}
Rode os dois programas e perceba a diferena.
Em uma linguagem moderna, o argumento que voc nunca precisar descer ao nvel
de ponteiros, porque isto simplesmente mostra que voc est pensando em um nvel
muito primitivo e pode por em perigo a unio com o hardware. Embora isto seja
verdade, ainda h momentos quando em que voc tem que interagir com o hardware
de uma forma que s pode ser alcanada usando ponteiros. Alm disso, h todos
aqueles programas em C/C++ que usam ponteiros e precisam ser convertido para algo
mais polido e seguro. Em resumo, voc certamente deve saber sobre ponteiros mesmo
esperando que voc nunca ir realmente usa-los em um programa real. Se voc acha
que os ponteiros so essenciais para algo de baixo nvel que voc est tentando
implementar, em seguida, tambm importante que voc saiba como implement-los
em um possvel mtodo seguro.
Primeiro precisamos esclarecer algumas confuses que existe entre os trs termos
Referncia, ponteiro e endereo. Comeando como o mais bsico endereo: o
nmero do endereo de algo que est armazenado. A maioria dos hardwares do
computador atribui endereos usando um esquema simples de incremento a partir de
algum valor e continuam at outro valor, por exemplo, 0-1000, e cada endereo
correspondem a uma posio de memria capaz de armazenar alguns dados com um
determinado nmero de bits. Esta ideia simples tornou-se cada vez mais complicada
com a evoluo do hardware e a introduo do mapeamento de memria de
hardware. Agora o endereo que os dados so armazenados mudado sem que eles
sejam movidos, devido utilizao de hardware de converso de endereos. Mesmo
que o hardware no possa mudar o endereo, ele pode ser mudado quando o
aplicativo for executado, pelo sistema operacional ou o sistema de coleta de lixo, que
normalmente efetua algumas mudanas para o sistema ficar mais eficiente. O ponto
que embora uma vez que o endereo de memria era uma forma fixa e confivel de
acesso, hoje cercado por uma serie de problemas.
Em C# podemos fazer uso de referncias o tempo todo, sob a forma de variveis que
so atribudas qualquer tipo de referncia. Por exemplo, se voc criar uma instncia de
uma classe, a varivel de instncia no um objeto, mas uma referncia a um objeto.
Isto :
tipo * variavel;
unsafe
int* pMyInt;
int MyInt;
pMyInt = &MyInt;
MessageBox.Show(((int)pMyInt).ToString());
Claro que isto pressupe que no int caber o ponteiro, ou seja, um endereo de
memria.
MessageBox.Show((*pMyInt).ToString());
O cdigo acima mostra o contedo de MyInt. Um ponteiro pode ser nulo e se neste caso for
aplicado o operador de referencia (*), gera uma exceo. Obviamente no faz sentido querer
exibir o contedo de um ponteiro nulo, mas voc sempre pode converter um ponteiro void e
ento evitar o engano. Em alguns casos, voc pode produzir um erro de converter
incorretamente um ponteiro. Por exemplo:
MessageBox.Show((*(double*)pMyData).ToString());
No cdigo acima definido um ponteiro nulo para apontar para um inteiro, ou seja,
um nmero inteiro de 32 bits, em seguida, ele convertido para um ponteiro de
double, ou seja, double *, e finalmente aplicado o operador de referncia para
retornar o valor apontado. Se voc tentar fazer isso, ver que ele funciona, mas gera
um resultado inesperado, porque o int original era de apenas 4 bytes de
armazenamento e do double de 8 bytes. De onde que ser adicionado os 4 bytes? A
resposta de um local de memria vizinho, um que voc no seria capaz de acessar s
apontando para o inteiro. Ler uma posio de memria que voc no conhecida at
pode ser seguro, mas quem sabe que efeitos isto pode trazer para o seu cdigo ou
sistema operacional. Por exemplo:
int MyInt2 = 0;
int MyInt=1234;
*(double*)pMyData = 123456.789;
MessageBox.Show(MyInt2.ToString());
Sempre podemos usar um ponteiro nulo para obter o endereo de qualquer varivel:
void* MyPointer;
MyPointer = &MyInt;
Ento podemos atribu-lo a qualquer ponteiro de qualquer um dos tipos padro e usar
aritmtica de ponteiro, como no exemplo abaixo, onde um byte, convertido para um
char:
MessageBox.Show(MyChar.ToString());
Na maioria dos casos, so existem maneiras de ter acesso estrutura interna dos tipos
de dados comuns usando as classes Converter ou BitConvertor. No caso do
BitConvertor o mtodo GetBytes pode ser usado para converter o int para um array de
bytes e ento qualquer um dos bytes pode ser convertida para um caractere usando a
classe Convert:
MyChar = Convert.ToChar(Bytes[3]);
Se voc entender como funciona um ponteiro, vai entender como lidar com ponteiro
de ponteiro, e ponteiro de ponteiro de ponteiro, e assim por diante. Em teoria, isto
fcil, na prtica no to complicada como voc deve pensar. Por exemplo:
int** ppMyInt;
int* pMyInt;
int MyInt=1234;
pMyInt = &MyInt;
ppMyInt = &pMyInt;
MessageBox.Show((**ppMyInt).ToString());
Bem como trabalhar com tipo de valor que voc pode criar seus prprios tipos de
dados primitivos usando a pilha. A declarao stackalloc tipo[n] aloca n bytes para o
tipo e retorna um ponteiro. Voc no precisa se preocupar com o armazenamento, a
pilha no modificada, ou a coleta de lixo, enquanto as variveis esto no escopo de
execuo. Voc tambm no precisa se lembrar de desalocar a memria, porque a
pilha automaticamente limpa quando as variveis saem do mbito da aplicao,
geralmente quando o mtodo que as declarou retorna.
Por exemplo:
pMyArray[10] = 34;
MessageBox.Show(pMyArray[10].ToString());
Aloca 100 nmeros inteiros, ou seja, 400 bytes, na pilha e usa o ponteiro para
armazenar 34 em 4 bytes comeando no byte 40 e exibe este valor.
Observe que usamos a indexao do array, para fazer a atribuio e para exibir o valor,
exatamente com em um array padro. No entanto, o bloco de memria apenas um
bloco de memria que voc pode fazer o que quiser com ele. Por exemplo:
public int x;
public int y;
};
MyStructType* pMyDataBlock = stackalloc MyStructType[1];
pMyDataBlock->x = 34;
Aloca uma strutc na pilha, mas isso , aloca o tamanho do struct que possui dois
nmeros inteiros, ou seja, 8 bytes.
Podemos usar o ponteiro para a struct de forma habitual para definir e acessar um
campo. Ou seja, podemos usar o bloco como se fosse uma estrutura, mas se quisermos
podemos simplesmente trat-lo como um bloco de 8 bytes e utiliz-lo como outras
estruturas de dados. Por exemplo, se voc quiser tratar os dados como um array de
int, voc pode:
*((int*)pMyDataBlock) = 36;
pMyArray[0] = 36;
Cria um ponteiro para inteiro, e usa indexao de array para acessar o primeiro
elemento do array que o mesmo do campo x da estrutura.
class Recursividade
{
/**
* Definio: funo recursiva que determina
* se uma palavra um palndromo ou no
*
* @parmetros: uma string contendo a palavra, um
* ndice para o final da palavra e um
* ndice para o inicio da palavra.
* @sem retorno
*/
static void palindromo(string palavra, int fim, int indiceInicio)
{
//soluo trivial, se a palavra tem uma s letra.
if (fim == 1)
Console.Write("Palavra um palndromo");
/*
* Checando se o primeiro e ultimo termo da palavra so iguais.
* Se sim, chamar recursivamente a funo seno imprimir uma
* mensagem.
*/
else if (palavra[fim - 1] == palavra[indiceInicio])
palindroma(palavra, fim - 1, indiceInicio + 1);
else
Console.WriteLine("Palavra no um palndromo");
}
static void Main(string[] args)
{
//Var
string palavra;
//input
Console.WriteLine("Entre com uma palavra: ");
palavra = Console.ReadLine();
//processing
palindromo(palavra, palavra.Length,0);
Console.ReadKey();
}
}
System.Console.WriteLine();
System.Console.Write();
System.Console.Read();
Existe na teoria de converso de dados dois tipos: a implcita e a explicita.
Assim como o nome j diz, a converso feita de forma implcita, sem que seja
percebido. Converter um dado implicitamente significa, por exemplo atribuir um int para um
float.
namespace ConversaoImplicita
{
class Program
{
static void Main(string[] args)
{
/*
* convertendo implicitamente os
* dados logo na declarao.
*
*/
sbyte sb = 10;
short b = sb;
int i = b;
long l = i;
float f = l;
double d = f;
Console.Write(f);
Console.Read();
}
}
}
}
Existe uma tabela de converso implcita disponibilizada pela Microsoft, que contm
todas as formas implcitas possveis. Vale ressaltar que esse tipo de converso deve ser feita de
forma cuidadosa, pois a tipos como Int que possuem menos pontos de preciso nos valores
armazenados, o que pode acarretar em arredondamentos de valores de forma errnea.
Observe a tabela de converso abaixo e anlise as opes possveis:
Essa a converso que na qual o programador necessita utilizar o cast explcito
para converter um dado em outro. Para realizar esse tipo de converso, basta declarar
frente da varivel da direita e entre parnteses o tipo de dado que deseja
(chamamos isso de cast). Veja o exemplo:
namespace CoversaoExplicita
{
class Program
{
static void Main(string[] args)
{
//imprimindo o valor de f
Console.Write(f);
Console.Read();
}
}
}
Perceba que o valor da varivel f ainda um double. Para a converso
explicita tambm h uma tabela de equivalncia.
H ainda a converso com o auxlio de classes. A classe que daremos destaque
nessa apostila Convert que esta no namespace System. Esta uma classe que possui
mais de 300 mtodos prprios para converso de dados. Os tipos da dados base
suportados, so: Boolean, Char, Sbyte, Byyte, Int16, Int32, Int64, Single, Double,
Decimal, DataTime (este tipo de dados da suporte para manipulao de datas e horas)
e String.
Uma converso que no pode produzir um resultado significativo, produz uma
exceo do tipo InvalidCastException (falaremos mais sobre tratamento de exceo
posteriormente). Por hora, basta saber que um erro ser produzido em
transformaes do tipo: Char para Boolean, Single, Double, Decimal ou DateTime.
Constantes.
Campos.
Eventos.
Construtores.
Destrutor.
Propriedades.
Mtodos.
Indexadores.
Operadores.
Tipo identificador = new Tipo(...);
// Declara um identificador do tipo DateTime,
// cria uma instncia de um objeto DateTime na pilha
// e o inicializa com 25 de Dezembro de 2005.
int n4;
// Declara um identificador do tipo Horario,
// cria uma instncia de um objeto no heap
// e o inicializa com 9 horas 10 minutos e 20 segundos.
A ideia por trs das propriedades que um mtodo ou grupo de mtodos seja
revestido de tal forma que parea um campo, no que diz respeito a qualquer cdigo
cliente.
-read-write Acessores
Acessores get (somente)
get -write-only
set Acessores
- read-only set (somente)
public class Horario : object
{
...
public byte Hora
{
get
{
return hora;
}
set
{
hora = value;
}
}
}
O operador new, serve par instanciar um novo objeto. Com o operador new, o sistema
operacional interpreta que tem que liberar uma determinada quantidade de memria
pra o programa. Perceba que tambm usamos esse operador para trabalhar com
vetores, matrizes, filas, pilhas, arvores e com objetos.
using System;
class Program
{
static void Main(string[] args)
{
//declarao de variveis (instanciando novos objetos).
int myInt = new int();
bool myBool = new bool();
float myFloat = new float();
double myDouble = new double ();
using System;
class Program
{
static void Main(string[] args)
{
//Declarando um vetor
int [] vetor = new int[4] { 1, 2, 3, 4 };
//Declarando uma matriz.
int[,] matriz = new int[2, 4] { {1,2,3,4}, {4,5,6,7}};
Console.ReadKey();
}
}
Instanciando objetos:
using System;
namespace ConsoleApplication1
{
/*
* Classe Relogio.
*/
//Construtores
//Construtor Padro
public Relogio()
{
this.tipo = '0';
quantidade++;
}
public Relogio(int hr, int min, int seg)
{
this.seg = seg;
this.min = min;
this.hr = hr;
this.tipo = '1';
quantidade++;
}
public Relogio(int hr, int min)
{
this.min = min;
this.hr = hr;
this.tipo = '2';
quantidade++;
}
//metodos get e set
//varivel seg
public int getSeg()
{
return this.seg;
}
public void setSeg(int seg)
{
this.seg = seg;
}
//variavel min
public int getMin()
{
return this.min;
}
public void setMin(int min)
{
this.min = min;
}
//varivel hr
public int getHr()
{
return this.hr;
}
public void setHr(int hora)
{
this.hr = hora;
}
//tipo
public char getTipo()
{
return this.tipo;
}
//Destrutores
~Relogio()
{
this.seg = 0;
this.min = 0;
this.hr = 0;
quantidade--;
}
}
/*
* Classe Principal.
*/
class Teste
{
static void Main(string[] args)
{
//Instanciando os objetos.
Relogio relogio0 = new Relogio();
Relogio relogio1 = new Relogio(1,2);
Relogio relogio2 = new Relogio(1,2,3);
Console.WriteLine();
relogio2.verHora();
Console.ReadKey();
}
}
}
public: Permite que todas as classes vejam quem for declarado desta forma.
private: No permite que nenhuma outra classe, alm da atual, veja quem for
declarado desta forma.
Estes modificadores servem para alterar o estado, diferentemente dos anteriores que
serviam para alterar o acesso. Estes modificadores so aplicadas em funes e/ou
varireis.
static: Fixa em uma classe um termo. Podemos perceber que sempre que a funo
principal ( Main() ) declara, utiliza-se deste modificador, uma vez que s existe uma
funo principal em todo o programa.
interface IColorido
{
public string cor();
}
//Classe chamada 'BolaVermelha' herda as outras classes
public class BolaVermelha : IObjeto, IColorido
{
public string formato()
{
return "esfrico";
}
override: O modificador override simplesmente diz que o mtodo que ele segue est
sobrescrevendo outro, ou seja, voc est apagando o mtodo antigo e colocando no
lugar este novo. Veremos exemplos mais abaixo.
A estrutura do tratamento
try
{
//Comandos para serem testados.
}
catch (NomeErro)
{
//Comandos caso o erro seja encontrado.
}
finally
{
/*
* Comandos que so realizados, no
* importando o resultado do teste
*/
}
Ser executado um trecho de cdigo que esta dentro do try, caso ocorra algum
erro, o que normalmente o fecharia, o programa automaticamente passa para a
estrutura que captura o erro (catch) que recebe como parmetro, mas no
obrigatoriamente, um erro especifico que ser tratado. A estrutura finally serve para
executar comandos que sempre devem ser executados, no importando se ocorreu ou
no erro no programa. Toda estrutura try deve possuir um catch, contudo o finally
opcional.
Para no se tratar um erro, mas identificar que este conhecido, basta utilizar
a clausula throw.
using System;
class MainClass
{
static void ProcessString(string s)
{
if (s == null)
{
throw new ArgumentNullException();
}
}
Console.ReadKey();
}
}