Buscar

C# A Linguagem de Programação CSharp básico

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 136 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 136 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 136 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

C#: A Linguagem de Programação 
CSharp básico 
 
por 
 
Prof. Dr. Paulo Roberto Gomes Luzzardi 
 
 
 
 
 
 
facebook: Paulo Roberto Gomes Luzzardi 
WhatsApp: 91648037 
e-mail: pluzzardi@gmail.com e pluzzardi@yahoo.com.br 
e-mail (Senac): prgomesluzzardi@senacrs.edu.br 
DropBox: https://www.dropbox.com/sh/kea9kr4j2qttnjg/4xXvw0pvxX?m 
Hostinger: http://pluzzardi.w.pw e http://pluzzardi.zz.mu (Home Page) 
OS X Server (Apple): http://pluzzardi.no-ip.info:8080 (Home Page) 
 
 
 
Versão 1.04 
06-10-2014 
 
 
 
Bibliografia recomendada: 
 
 
DEITEL, H. M. and DEITEL, P. J. Java: como programar, 8. ed.: São 
Paulo: Pearson, 2010 (ISBN 85-363-0123-6). 
 
 
 
 
Pelotas, segunda-feira, 6 de outubro de 2014 (11:25:58 am) 
2 
Sumário 
 
1. Arquitetura de um programa em C# .......................................................................................... 5	
  
1.1 Elementos básicos de um programa em C# .............................................................. 5	
  
1.2 Elementos básicos de um método estático em C# ............................................. 6	
  
1.3 Como compilar um programa em C# via Terminal ............................................... 6	
  
1.4 Como executar um programa em C# via Terminal ............................................... 6	
  
1.5 Pasta contendo os projetos/arquivos em C# ....................................................... 6	
  
2. Estrutura de um programa em C# ............................................................................................... 6	
  
2.1 Identificadores em C# ....................................................................................................... 6	
  
2.2 Comentários do programador em C# ............................................................................ 7	
  
2.3 Regras gerais para escrever um programa em C# ............................................. 7	
  
2.4 Palavras reservadas do C# ............................................................................................. 8	
  
2.5 Declaração de variáveis em C# .................................................................................... 8	
  
2.5.1 Onde as variáveis podem ser declaradas em C# ....................................... 8	
  
2.5.2 Inicialização de variáveis em C# .................................................................. 10	
  
2.6 Constantes em C# ................................................................................................................. 10	
  
2.6.1 Constantes hexadecimais e octais em C# ................................................... 10	
  
2.6.2 Constantes Strings em C# ..................................................................................... 11	
  
2.6.3 Constantes especiais em C# ................................................................................ 12	
  
2.7 Comandos do pré-processador do C# ........................................................................ 12	
  
2.7.1 O comando using .......................................................................................................... 12	
  
3. Tipos de dados em C# ..................................................................................................................... 12	
  
3.1 Tipos básicos em C# .......................................................................................................... 12	
  
3.2 Escrevendo uma classe em C# ...................................................................................... 13	
  
3.2.1 Conceitos básicos sobre orientação à objetos ......................................... 13	
  
3.2.2 Referência this em C# ................................................................................................ 19	
  
3.2.3 Lista de Exercícios sobre Classes em C# ..................................................... 20	
  
3.3 Sobrecarga de métodos em C# ...................................................................................... 31	
  
3.4 Ponteiros, referências e endereços em C# ....................................................... 31	
  
Operadores de ponteiros .......................................................................................................... 33	
  
4. Métodos de entrada e saída de dados ................................................................................. 33	
  
4.1 Entrada e saída de dados usando TextReader e TextWriter ................... 33	
  
4.2 Entrada e saída de dados utilizando Console ................................................ 34	
  
4.3 Leitura de uma tecla em C# (pausa por teclado) ......................................... 34	
  
5. Operadores em C# .............................................................................................................................. 35	
  
5.1 Operadores aritméticos em C# .................................................................................... 35	
  
5.2 Operadores relacionais em C# .................................................................................... 35	
  
5.3 Operadores lógicos em C# .............................................................................................. 35	
  
5.4 Incremento e decremento em C# .................................................................................. 36	
  
5.5 Operador de atribuição em C# .................................................................................... 36	
  
5.6 Casts em C# ............................................................................................................................. 37	
  
5.7 Expressões em C# ................................................................................................................. 38	
  
6. Métodos para funções matemáticas padrões em C# ...................................................... 38	
  
6.1 Math.Abs .................................................................................................................................... 38	
  
6.2 Math.Asin .................................................................................................................................. 38	
  
6.3 Math.Acos .................................................................................................................................. 38	
  
6.4 Math.Atan .................................................................................................................................. 39	
  
6.5 Math.Sin .................................................................................................................................... 39	
  
6.6 Math.Cos .................................................................................................................................... 39	
  
6.7 Math.Tan .................................................................................................................................... 39	
  
6.8 Math.Exp .................................................................................................................................... 39	
  
6.9 Math.Pow .................................................................................................................................... 39	
  
6.10 Math.Sqrt ............................................................................................................................... 39	
  
6.11 Math.Log .................................................................................................................................. 39	
  
6.12 Convert.ToDouble .............................................................................................................. 40	
  
3 
6.13 Convert.Int?? (16, 32 ou 64) .................................................................................. 40	
  
6.14 Convert.ToByte ................................................................................................................... 40	
  
6.15 Math.Log10 .............................................................................................................................40	
  
6.16 Random ...................................................................................................................................... 40	
  
6.17 Math.PI .................................................................................................................................... 40	
  
6.18 Conversão de graus para radianos ........................................................................ 41	
  
7. Comandos em C# ................................................................................................................................... 41	
  
7.1 Tipos de comandos em C# ................................................................................................ 41	
  
7.1.1 Sequência em C# .......................................................................................................... 41	
  
7.1.2 Seleção em C# ............................................................................................................... 41	
  
7.1.3 Repetição em C# .......................................................................................................... 43	
  
7.2 Comando if em C# ................................................................................................................. 43	
  
7.2.1 if encadeados em C# ................................................................................................. 44	
  
7.3 O comando switch em C# .................................................................................................. 45	
  
7.4 Comando while no C# .......................................................................................................... 48	
  
7.5 O comando for no C# .......................................................................................................... 50	
  
7.6 O loop do { } while no C# ........................................................................................... 52	
  
7.7 Interrupção de loops em C# ......................................................................................... 52	
  
7.7.1 O comando break em C# ............................................................................................ 52	
  
7.7.2 O comando continue no C# ..................................................................................... 53	
  
7.8 O método Environment.Exit () .................................................................................... 54	
  
8. Saída formatada com String.Format ..................................................................................... 54	
  
9. Lista de exercícios (comandos) ............................................................................................. 57	
  
10. Vetores, Matrizes e Strings em C# ................................................................................... 60	
  
10.1 Vetores em C# ...................................................................................................................... 61	
  
10.2 Strings em C# ...................................................................................................................... 62	
  
10.3 Matrizes (Multidimensional) em C# ...................................................................... 63	
  
10.4 Vetor de Strings em C# ................................................................................................ 64	
  
10.5 Inicialização de matrizes e vetores em C# .................................................. 65	
  
10.6 Inicialização de um vetor de caracteres em C# ......................................... 65	
  
10.7 Inicialização de matrizes multidimensionais em C# ............................... 65	
  
10.8 Inicialização de vetores e matrizes sem tamanho em C# ..................... 65	
  
10.9 Classificação de dados ou ordenação (sort) em C# ................................. 67	
  
10.10 Lista de exercícios (vetores) ............................................................................. 69	
  
11. Manipulação de Strings em C# ............................................................................................... 72	
  
11.1 Métodos para manipular Strings em C# .............................................................. 72	
  
11.2 Lista de exercícios (Strings) ............................................................................... 74	
  
12. Métodos estáticos definidos pelo programador em C# .......................................... 76	
  
12.1 Valores de retorno em C# ........................................................................................... 77	
  
12.2 Passagem de parâmetros por valor em C# ......................................................... 80	
  
12.3 Passagem de parâmetros por referênciaem C# ................................................ 80	
  
12.4 Métodos que devolvem valores não-inteiros em C# .................................... 82	
  
12.5 Argumentos do Main (String [] args) em C# .................................................. 82	
  
12.6 Recursividade em C# ....................................................................................................... 84	
  
12.7 Lista de Exercícios (métodos) ............................................................................... 86	
  
13. Classes existentes em C# ......................................................................................................... 88	
  
13.1 Object (classe base de objetos) em C# ............................................................ 89	
  
13.2 List (lista tipada de objetos) em C# .............................................................. 89	
  
13.3 ArrayList (lista de arrays) em C# ...................................................................... 91	
  
13.4 IList (lista de objetos indexados) em C# ..................................................... 92	
  
13.5 Stack (Pilha) em C# ....................................................................................................... 93	
  
13.6 Queue (Fila) em C# .......................................................................................................... 94	
  
14. Entrada e saída em disco (Arquivos) em C# ................................................................ 95	
  
14.1 Métodos para manipular arquivos em C# ............................................................ 95	
  
14.2 Abertura de um arquivo texto em C# ................................................................... 95	
  
14.3 Listar um diretório em C# ......................................................................................... 96	
  
4 
14.4 Manipulação de um arquivo texto de palavras em C# ............................... 98	
  
14.5 Arquivo Texto em C# ..................................................................................................... 101	
  
14.6 Lista de exercícios (arquivos) ........................................................................... 105	
  
14.7 Arquivos binários em C# ............................................................................................ 109	
  
15. Conceitos diversos em C# ....................................................................................................... 111	
  
15.1 Operadores bit a bit em C# .................................................................................... 111	
  
15.2 Formas abreviadas de C# ............................................................................................ 112	
  
16. Listas Lineares: Pilha, Fila e Fila Circular em C# ........................................ 112	
  
16.1 Implementação de um lista em vetor em C# ................................................... 113	
  
16.2 Implementação de uma Pilha em C# ...................................................................... 116	
  
16.3 Implementação de uma Fila em C# ........................................................................ 118	
  
16.4 Implementação de uma Fila Circular em C# ................................................... 119	
  
17. Tratamentode erros em C# .................................................................................................... 121	
  
17.1 Tratamento de exceções em C# ................................................................................ 122	
  
17.2 Tratamento de erros na entrada de número inteiro em C# ................. 122	
  
17.3 Tratamento de erros: Divisão por zero em C# ........................................... 123	
  
18. Herança em C# ................................................................................................................................. 124	
  
18.1 Herança simples em C# ................................................................................................ 124	
  
18.2 Controle de acesso na definição de uma classe derivada em C# ... 125	
  
18.3 Tipos de acessos (especificadores de acesso) em C# ........................... 126	
  
18.4 Lista de exercícios sobre Herança em C# ..................................................... 128	
  
18.4.1 Herança (primeiro) em C# .................................................................................... 128	
  
18.4.2 Herança (segundo) em C# ....................................................................................... 129	
  
18.4.3 Herança (terceiro) em C# .................................................................................... 130	
  
19. Coletor de Lixo (Garbage Collector) em C# .............................................................. 132	
  
20. Construtor e finalizador em C# ........................................................................................ 133	
  
21. Data e Hora em C# ....................................................................................................................... 135	
  
22. Eliminar problemas na conversão na entrada de dados ...................................... 135	
  
 
 
5 
1. Arquitetura de um programa em C# 
 
1.1 Elementos básicos de um programa em C# 
 
using diretiva; 
 
namespace nomePrograma 
{ 
 class nome_da_classe 
 { 
 
 public static void Main(string[] args) // método principal 
 { 
 corpo_da_classe; 
 } 
 } 
} 
 
Exemplos: 
 
// -------------------------------------------- Fonte: ProgA.cs 
 
using System; 
 
namespace ProgA 
{ 
 class MainClass 
 { 
 public static void Main (string[] args) 
 { 
 float x = 3, y = 4, t = x + y; 
 
 Console.WriteLine ("Soma: " + t); // imprimir na tela 
 } 
 } 
} 
 
Resultado do Programa: 
 
Soma: 7 
 
// -------------------------------------------- Fonte: ProgB.cs 
 
using System; 
 
namespace ProgB 
{ 
 class MainClass 
 { 
 public static void Main (string[] args) 
 { 
 float x, y, t; 
 
 Console.Write ("x = "); 
 x = float.Parse (Console.ReadLine()); // ler do teclado 
 Console.Write ("y = "); 
 y = float.Parse (Console.ReadLine()); // ler do teclado 
 t = x + y; 
 Console.WriteLine ("Soma: {0}", t); // forma alternativa de imprimir na tela 
 } 
 } 
} 
 
Resultado do Programa: 
 
x = 3 
y = 4 
Soma: 7 
 
Programa Fonte: nome_da_classe.cs // ProgA.cs e ProgB.cs 
 
6 
1.2 Elementos básicos de um método estático em C# 
 
static tipo_de_retorno nome_do_método(tipo_do_agumento nome_do_argumento, ...) 
{ 
 corpo_do_método; 
 return(valor_de_retorno); 
} 
 
1.3 Como compilar um programa em C# via Terminal 
 
$ gmcs Prog1.cs <enter> // gera o arquivo “Prog1.exe” 
$ 
 
1.4 Como executar um programa em C# via Terminal 
 
$ mono Prog1.exe <enter> 
$ 
 
1.5 Pasta contendo os projetos/arquivos em C# 
 
/Users/pluzzardi/Projects // MacOsX 
 
2. Estrutura de um programa em C# 
 
2.1 Identificadores em C# 
 
 São os nomes criados pelo programador para fazer referência a 
namespaces, variáveis, constantes, argumentos, atributos e métodos. 
 
Regras para a criação de identificadores: 
 
ü O primeiro caracter pode ser uma letra ou sublinha ( _ ); 
ü Os caracteres seguintes devem ser letras, números ou sublinhas; 
ü Não é permitido a utilização de caracteres em branco (caracter 
espaço); 
ü Podem ser letras maiúsculas e minúsculas. 
 
Exemplos em variáveis: int numeroDentes = 32; 
 double inflacao; 
 char a, _a; 
 
Exemplos em constantes: final char letra = ‘A’; 
 final int tamanho = 10; 
 final double d = 123.45; 
 
Exemplos de argumentos: public int Div(int x, int y) { 
 public bool strChr(String s, char ch) { 
 
Exemplos de atributos: private int numElementos; 
 private int []vetor; 
 private int topo; 
 
Exemplos em métodos: x = raizQuadrada(y); 
 Console.WriteLine(“Valor: {0}”, inverso(n)); 
 
Observação: o método “inverso” é definido pelo programador (1/n). 
 
 
 
7 
2.2 Comentários do programador em C# 
 
 Os comentários do programador são linhas de código que não são 
compiladas pelo compilador, ou seja, servem apenas como anotações 
(documentação) para serem lembradas mais tarde (por exemplo, quando 
forem feitas manutenções no programa). Em C# os comentários podem ser 
feitos de duas formas: 
 
 /* Assim pode ser usado para comentário de várias linhas */ 
 // Isto é um comentário de uma linha apenas 
 
 Um comentário, pode ainda, utilizar várias linhas do programa. 
Veja o exemplo abaixo: 
 
/* ---------------------------------------------------- 
 Método: STRING 
 Argumentos de entrada: x, y 
 Argumentos de saída: c[], t[] 
 Retorno: Sem Retorno 
------------------------------------------------------- */ 
 
2.3 Regras gerais para escrever um programa em C# 
 
 Um programa em CSharp é constituído de uma ou mais classes 
delimitadas por chaves { }, onde uma destas classes, obrigatoriamente 
possui um método chamada Main(). As principais regras são: 
 
ü Letras maiúsculas e minúsculas são tratadas como caracteres diferentes; 
ü O formato do texto é livre; 
ü O método Main(){} especifica onde o programa começa e termina de ser 
executado; 
ü Todos os comandos são terminados por ponto e vírgula; 
ü Todas as variáveis devem ser declaradas; 
ü { método começa a ser executado; 
ü } método termina de ser executado. 
 
Programa exemplo: Imprimir a data no seguinte formato: [Data: 
dd/mm/aaaa]. 
 
// -------------------------------------------- Fonte: Prog1.cs 
 
using System; 
 
namespace Prog1 
{ 
 class MainClass 
 { 
 public static void Main (string[] args) 
 { 
 int dia, mes, ano; 
 
 dia = 16; 
 mes = 11; 
 ano = 2013; 
 // Console.WriteLine ("Data: " + dia + "/" + mes + "/" + ano); // forma alternativa de imprimir na tela 
 Console.WriteLine ("Data: {0}/{1}/{2}", dia, mes, ano); 
 } 
 } 
} 
 
Resultado do Programa: 
 
Data: 16/11/2013 
 
 
 
8 
2.4 Palavras reservadas do C# 
 
 As palavras reservadas não podem ser utilizadas como identificadores 
pelo programador para nomes de namespaces, variáveis, constantes, argumentos, 
atributos ou métodos. 
 
abstract event new struct 
as explicit null switch 
base extern object this 
bool false operator throw 
break finally out true 
byte fixed override try 
case float params typeof 
catch for private uint 
char foreach protected ulong 
checked goto public unchecked 
class if readonly unsafe 
const implicit ref ushort 
continue in return using 
decimal int sbyte virtual 
default interface sealed volatile 
delegate internal short void 
do is sizeof while 
double lock stackalloc 
else long static 
enum namespace string 
 
Palavras reservadas não específicas ao C# 
 
from join select yield 
get let set group 
orderby value into partial 
 
2.5 Declaração de variáveis em C# 
 
Sintaxe: tipo_dado_base lista_de_variáveis; 
tipo_dado_base: deve ser um tipo de dado válido (bool, byte, sbyte, 
char, decimal, double, float, int, uint, long, ulong, object, short, 
ushort e String) 
lista_de_variáveis: um ou mais identificadores separados por vírgulas. 
 
Exemplos: 
 
 int i, j ,k;float a, b; 
 char ch; 
 
2.5.1 Onde as variáveis podem ser declaradas em C# 
 
ü Definidas fora de todas os métodos, incluindo o método Main() 
são chamadas de variáveis globais e podem ser acessadas em 
qualquer parte do programa. Estas variáveis são alocadas 
estaticamente na memória RAM (Random Access Memory – Memória de 
acesso randômico). 
ü Quando definidas dentro de um método são chamadas de variáveis 
locais e só podem ser acessadas dentro deste método. Estas 
variáveis são alocadas dinamicamente na memória RAM. 
ü Na declaração de parâmetros formais (argumentos) de um método. 
Sendo estas locais e alocadas dinamicamente na memória RAM. 
 
Observação: Memória ROM (Read Only Memory – Memória somente de leitura). 
9 
 
Alocação de memória: Forma de reservar espaço de memória (RAM) para 
alocar uma informação (estática ou dinâmica). 
 
ü Alocação estática de memória: Tipo de alocação de memória em que 
uma variável é alocada (tem um espaço reservado) na memória RAM 
durante toda a execução do programa. Este espaço de memória é 
desalocado somente quando o programa acaba. 
ü Alocação dinâmica de memória: Tipo de alocação de memória em que 
uma variável é alocada (tem um espaço reservado) na memória RAM 
temporariamente. Este espaço de memória é desalocado quando o 
espaço não é mais necessário (coleta automática de lixo – garbage 
collector). 
 
Coletor de lixo explícito em C#: GC.Collect(); 
 
Programa exemplo: O programa realiza uma operação de potência Xy. 
 
// -------------------------------------------- Fonte: Prog2.cs 
 
using System; 
 
namespace Prog2 
{ 
 
 class MainClass 
 { 
 static double resultado; // variável global 
 
 // ---------------------------------- método estático POTENCIA 
 
 static double POTENCIA (double x, double y) 
 { 
 // corpo do método POTENCIA definido pelo programador 
 // os argumentos x e y são variáveis locais 
 
 // definição de uma variável local 
 double resp; 
 
 resp = Math.Exp (Math.Log (x) * y); 
 return(resp); // retorno do método 
 } 
 
 public static void Main(String[] args) 
 { 
 
 // definição das variáveis locais 
 double Base, Expoente; 
 
 // método que permite imprimir na tela em modo texto 
 Console.Write ("Base: "); 
 
 // método que permite entrada de dados via teclado em terminal texto 
 String s = Console.ReadLine (); 
 
 // método que converte String em float 
 Base = float.Parse (s); 
 
 Console.Write ("Expoente: "); 
 s = Console.ReadLine (); 
 Expoente = float.Parse (s); 
 
 // chamada do método POTENCIA 
 resultado = POTENCIA (Base, Expoente); 
 
 // método que imprime a resposta na tela 
 Console.WriteLine ("Resposta = {0}\n", resultado); 
 } 
 } 
} 
 
10 
Resultado do Programa: 
 
Base: 3 
Expoente: 4 
Resposta = 81 
 
 Variáveis globais: resultado 
 Variáveis locais: base, expoente, resp, x, y 
 
Compilar por linha de comandos (via terminal): 
 
$ gmcs Prog2.cs <enter> // gera arquivo Prog2.exe 
$ 
 
Executar por linha de comandos (via terminal): 
 
$ mono Prog2.exe <enter> // executa o arquivo Prog2.exe 
 
2.5.2 Inicialização de variáveis em C# 
 
 Em CSharp é possível fornecer valores iniciais a maioria das 
variáveis ao mesmo tempo em que elas são declaradas, colocando um 
sinal de igual e uma constante após o nome da variável. 
 
 tipo_dado_base nome_da_variável = constante; 
Exemplos: 
 
char ch = 'a'; // tipo_dado_base nome_da_variável = constante_caracter 
String s = “Pelotas”; // tipo_dado_base nome_da_variável = constante_string 
int n = 0; // tipo_dado_base nome_da_variável = constante_inteira 
float y = 123.45f; // tipo_dado_base nome_da_variável = constante_real 
double z = 123.45; 
int [] v = {10, 20, 30}; // vetor unidimensional 
int [,] t = {{1, 2}, {3, 4}, {5, 6}}; // matriz bidimensional 
String [] cidade = {“Pelotas”, “Rio Grande”, “Poa”}; 
char [] caracter = {‘S’, ‘s’, ‘N’, ‘n’}; 
 
2.6 Constantes em C# 
 
 Valores fixos que o programa não pode alterar. As constantes 
podem ser de qualquer tipo básico. 
 
 Tipo Exemplos de constantes 
 
 char 'a' 'n' '9' 
 int 1 123 2100 -234 
 float 123.23 4.34e-3 
 String "CSharp" (classe String) 
 
Forma de declarar uma constante tipada em C#: 
 
const int numeroElementos = 10; 
const char ch = 'A'; 
const float f = 1.234f; 
 
2.6.1 Constantes hexadecimais e octais em C# 
 
 A linguagem de programação CSharp permite especificar constantes 
inteiras em octal. Uma constante octal começa com um 0 (zero) antes 
dos demais números. 
 
Exemplos: 
 
int hexadecimal = 0xf; // 15 em decimal 
int octal = 011; // 9 em decimal 
11 
 
Observações: 
 
ü Qualquer número octal é formado por oito números ( 0 .. 7 ). 
ü Qualquer número hexadecimal é formado por dezesseis números (0 
..9, A, B, C, D, E, F). 
 
// ------------------------------------------------------- Fonte: Hexadecimal.cs 
 
using System; 
 
namespace Hexadecimal 
{ 
 class MainClass 
 { 
 public static void Main (string[] args) 
 { 
 for (int valorDecimal = 0;valorDecimal < 16; valorDecimal++) { 
 string valorHexadecimal = valorDecimal.ToString("X"); 
 Console.WriteLine ("Hexadecimal: "+ valorHexadecimal); 
 // int hexaToDecimal = int.Parse(valorHexadecimal, System.Globalization.NumberStyles.HexNumber); 
 // Console.WriteLine("Hexadecimal para Decimal: " + hexaToDecimal); 
 } 
 } 
 } 
} 
 
Resultado do Programa: 
 
Hexadecimal: 0 
Hexadecimal: 1 
Hexadecimal: 2 
Hexadecimal: 3 
Hexadecimal: 4 
Hexadecimal: 5 
Hexadecimal: 6 
Hexadecimal: 7 
Hexadecimal: 8 
Hexadecimal: 9 
Hexadecimal: A 
Hexadecimal: B 
Hexadecimal: C 
Hexadecimal: D 
Hexadecimal: E 
Hexadecimal: F 
 
2.6.2 Constantes Strings em C# 
 
 Uma String é um conjunto de caracteres delimitados por aspas 
duplas. Em C# existe uma classe específica para trabalhar com Strings 
(classe String). 
 
 Uma String é finalizada pelo caracter especial ‘\0’ (chamado de 
null). 
 
Exemplo: String s = "Senac"; 
‘\0’ é igual a null 
0 1 2 3 4 5 
‘S’ ‘e’ ‘n’ ‘a’ ‘c’ null 
Figura 1: String 
Memória ocupada: 6 bytes 
 
Observação: 'a' é diferente de "a" 
 
'a' ocupa 1 byte na memória RAM (é do tipo char) 
"a" ocupa 2 bytes na memória (toda String é terminada com o caracter null) 
 
 A palavra null quer dizer nulo. 
12 
 
Vetor de Strings: 
 
String [] s = {“Paulo”, “Roberto”, “Gomes”, “Luzzardi”}; 
 
Vetor de caracteres: 
 
char [] s = {'U', 'C', 'P', 'e', 'l'}; char ch = ‘\0’; 
 
2.6.3 Constantes especiais em C# 
 
 As constantes especiais são usadas para representar caracteres 
que não podem ser inseridos pelo teclado. São elas: 
Tabela 1: Constantes especiais 
 
 
2.7 Comandos do pré-processador do C# 
 
2.7.1 O comando using 
 
 O comando using faz o compilador incluir um pacote de classes 
dentro do programa fonte. Cada pacote possui diversas classes. 
 
using System; 
 
 Na URL abaixo você encontra as diversas api C#: 
 
URL: http://msdn.microsoft.com/en-us/library/d11h6832%28v=vs.71%29.aspx 
 
3. Tipos de dados em C# 
 
3.1 Tipos básicos em C# 
 
 A tabela abaixo exibe os quinze (15) tipos de dados básicos que 
podem ser utilizados pelo programador para definir suas variáveis e 
constantes em C#. Na Tabela 2 são exibidos os tipos básicos, a faixa 
de valores válida, a quantidade de bits, e o tipo de framework (using) 
que cada tipo de dados ocupa ou representa na memória RAM (memória 
principal) ou em disco (quando armazenados na memória secundária). 
 
Tabela 2: Tipos de dados 
 
Tipo Faixa de valores Bits bytes Tipo de FrameWork 
bool verdadeiro ou falso System.Boolean 
byte 0 à 255 8 1 System.Byte 
sbyte -128 à 127 8 1 System.SByte 
char um caracter 16 2 System.Chardecimal ±1.0 × 10−28 à ±7.9 × 1028 128 16 System.Decimal 
double ±5.0 × 10−324 à ±1.7 × 10308 64 8 System.Double 
float ±1.5 × 10−45 à ±3.4 × 1038 32 4 System.Single 
int -2147483648 à 2147483647 32 4 System.Int32 
uint 0 à 4294967295 32 4 System.UInt32 
Constante Significado 
‘\b’ Retrocesso 
‘\f’ Alimentação de formulário 
‘\n’ Nova linha 
‘\r’ Retorno de carro <CR> 
‘\t’ Tab horizontal 
‘\”’ Aspas duplas 
‘\’’ Aspas simples 
‘\\’ Barra invertida 
‘\o’ Constante octal 
‘\x’ Constante hexadecimal 
13 
long –9223372036854775808 à 
9223372036854775807 
64 8 System.Int64 
ulong 0 à 18446744073709551615 64 8 System.UInt64 
object qualquer tipo System.Object 
short 32768 à 32767 16 2 System.Int16 
ushort 0 à 65535 16 2 System.UInt16 
string Seqüência de caracteres 
 
16 
(cada) 
2 System.String 
 
 
3.2 Escrevendo uma classe em C# 
 
3.2.1 Conceitos básicos sobre orientação à objetos 
 
 O paradigma orientado à objetos possui cinco componentes 
básicos: objetos (possui atributos e métodos), mensagens (chamada dos 
métodos), classes (tipo de dado), instâncias (criação de objetos de 
uma classe específica - new) e métodos (funções definidas pelo 
programador que manipulam os atributos). 
 
Objetos, mensagens, classes, instâncias e métodos 
 
Objetos são entidades lógicas que contém atributos (dados 
armazenados em variáveis) e métodos (funções) que manipulam estes 
dados. Um objeto pode ser definido através de um tipo de dado chamado 
classe (class). 
 
Resumo: 
 
a) Atributos: São as variáveis definidas e declaradas para cada 
objeto. 
b) Métodos: São as funções definidas pelo programador que servirão 
para manipular os atributos. 
c) Mensagens: São as chamadas dos métodos. 
d) Classe: É um tipo de dado definido por class. Uma classe não é 
um objeto, é sim uma descrição do objeto. 
e) Instância: Os objetos são instâncias de uma classe, ou seja, é 
criado um objeto pertencente a uma classe específica. O objeto 
pode responder chamadas dos métodos e armazenar informações nos 
atributos. 
 
Resumidamente, objetos são instâncias de classes que respondem 
as mensagens através dos métodos escritos pelo programador. 
 
 Uma linguagem de programação orientada à objetos pode suportar 
ou implementar seis propriedades: abstração, encapsulamento, 
polimorfismo, herança, associação (agregação e composição) e classes 
abstratas e concretas. 
 
Exemplo de uma classe “Vetor” em C#: 
 
// -------------------------------------------------------- Prog3.cs 
 
using System; 
 
namespace Prog3 
{ 
 public class Vetor 
 { 
 // -------------------------- atributos 
 
 private int[] vetor; 
 private int n; 
 private int max; 
14 
 
 // ------------------------------ construtor 
 
 public Vetor(int tam) // obrigado o modificador de acesso public 
 { 
 max = tam; 
 vetor = new int[max]; 
 n = 0; 
 } 
 
 // ------------------------------ add 
 
 public void add(int valor) 
 { 
 if (n < max) { 
 vetor[n] = valor; 
 n++; 
 } else { 
 Console.WriteLine("Erro: Vetor excedeu Limite"); 
 } 
 } 
 
 // ------------------------------ exibe 
 
 public void exibe() 
 { 
 Console.Write("Vetor: ["); 
 for (int i = 0; i < n; i++) { 
 Console.Write(vetor[i] + " "); 
 } 
 Console.WriteLine("]"); 
 } 
 } 
} 
 
// ----------------------------------------------- Prog3.cs 
 
using System; 
 
namespace Prog3 
{ 
 class MainClass 
 { 
 public static void Main (string[] args) 
 { 
 Vetor v = new Vetor (5); // declaração do objeto “v” da classe Vetor 
 
 v.add (10); 
 v.add (20); 
 v.add (30); 
 v.add (40); 
 v.add (50); 
 v.exibe (); 
 v.add (60); // testar o limite do vetor de 5 elementos 
 v.exibe (); 
 } 
 } 
} 
 
Resultado do Programa: 
 
Vetor: [10 20 30 40 50 ] 
Erro: Vetor excedeu Limite 
Vetor: [10 20 30 40 50 ] 
 
Tente implementar os seguintes métodos para a classe Vetor: 
 
 v.remove(); 
 v.exibe(); 
 Console.WriteLine("Total de Elementos: " + v.length()); 
 int pri = v.primeiro(); 
 Console.WriteLine("Primeiro: " + pri); 
 int ult = v.ultimo(); 
 Console.WriteLine("Último: " + ult); 
 int elemento = 20; 
15 
 bool flag = v.existe(elemento); 
 if (flag) { 
 Console.WriteLine("Status: Existe elemento 20"); 
 } else { 
 Console.WriteLine("Status: Não Existe elemento 20"); 
 } 
 v.removeElemento(elemento); 
 flag = v.existe(elemento); 
 if (flag) { 
 Console.WriteLine("Status: Existe elemento " + elemento); 
 } else { 
 Console.WriteLine("Status: Não Existe elemento " + elemento); 
 } 
 v.exibe(); 
 v.removePosicao(1); 
 v.exibe(); 
 
Resultado do Programa: 
 
Vetor: [10 20 30 40 50 ] 
Erro: Vetor excedeu Limite 
Vetor: [10 20 30 40 50 ] 
Vetor: [10 20 30 40 ] 
Total de Elementos: 4 
Primeiro: 10 
Último: 40 
Status: Existe elemento 20 
Status: Não Existe elemento 20 
Vetor: [10 30 40 ] 
Vetor: [10 40 ] 
 
// -------------------------------------------------------- Prog3a.cs 
 
using System; 
 
namespace Prog3a 
{ 
 class MainClass 
 { 
 public static void Main (string[] args) 
 { 
 Vetor v = new Vetor (5); 
 
 v.add (10); 
 v.add (20); 
 v.add (30); 
 v.add (40); 
 v.add (50); 
 v.exibe (); 
 v.add (60); // testa o limite do vetor de 5 elementos 
 v.exibe (); 
 v.remove(); 
 v.exibe(); 
 Console.WriteLine("Total de Elementos: " + v.length()); 
 int pri = v.primeiro(); 
 Console.WriteLine("Primeiro: " + pri); 
 int ult = v.ultimo(); 
 Console.WriteLine("Último: " + ult); 
 int elemento = 20; 
 bool flag = v.existe(elemento); 
 if (flag) { 
 Console.WriteLine("Status: Existe elemento 20"); 
 } else { 
 Console.WriteLine("Status: Não Existe elemento 20"); 
 } 
 v.removeElemento(elemento); 
 flag = v.existe(elemento); 
 if (flag) { 
 Console.WriteLine("Status: Existe elemento " + elemento); 
 } else { 
 Console.WriteLine("Status: Não Existe elemento " + elemento); 
 } 
 v.exibe(); 
 v.removePosicao(1); 
 v.exibe(); 
16 
 } 
 } 
} 
 
Solução do Problema: 
 
using System; 
 
namespace Prog3a 
{ 
 public class Vetor 
 { 
 // -------------------------- atributos 
 
 private int[] vetor; 
 private int n; 
 private int max; 
 
 // ------------------------------ construtor 
 
 public Vetor(int tam) // é obrigado o modificador de acesso public 
 { 
 max = tam; 
 vetor = new int[max]; 
 n = 0; 
 } 
 
 // ------------------------------ add 
 
 public void add(int valor) 
 { 
 if (n < max) { 
 vetor[n] = valor; 
 n++; 
 } else { 
 Console.WriteLine("Erro: Vetor excedeu Limite"); 
 } 
 } 
 
 // ------------------------------ remove 
 
 public void remove() 
 { 
 if (n > 0) { 
 n--; 
 } else { 
 Console.WriteLine("Erro: Vetor vazio"); 
 } 
 } 
 
 // ------------------------------ removeElemento 
 
 public voidremoveElemento(int num) 
 { 
 if (n == 0) { 
 Console.WriteLine ("Erro: Vetor vazio"); 
 } else { 
 for (int i = 0; i < n; i++) { 
 if (num == vetor[i]) { 
 for (int j = i; j < n; j++) { 
 vetor [j] = vetor [j + 1]; 
 } 
 n--; 
 break; 
 } 
 } 
 } 
 } 
 
 // ------------------------------ removePosicao 
 
 public void removePosicao(int pos) 
 { 
 int fim = length (); 
 if (pos < 0 || pos > fim) { 
17 
 Console.WriteLine ("Erro: Posição Inválida"); 
 } else { 
 for (int i = pos; i < n; i++) { 
 vetor [i] = vetor [i + 1]; 
 } 
 n--; 
 } 
 } 
 
 // ------------------------------ exibe 
 
 public void exibe() 
 { 
 Console.Write("Vetor: ["); 
 for (int i = 0; i < n; i++) { 
 Console.Write(vetor[i] + " "); 
 } 
 Console.WriteLine("]"); 
 } 
 
 // ------------------------------- length 
 
 public int length() 
 { 
 return(n); 
 } 
 
 // ------------------------------- primeiro 
 
 public int primeiro() 
 { 
 return(vetor[0]); 
 } 
 
 // ------------------------------- ultimo 
 
 public int ultimo() 
 { 
 return(vetor[n-1]); 
 } 
 
 // ------------------------------- existe 
 
 public bool existe(int num) 
 { 
 bool exist = false; 
 
 for (int i = 0; i < n; i++) { 
 if (num == vetor[i]) { 
 exist = true; 
 break; 
 } 
 } 
 return(exist); 
 } 
 } 
} 
 
Resultado do Programa: 
 
Vetor: [10 20 30 40 50 ] 
Erro: Vetor excedeu Limite 
Vetor: [10 20 30 40 50 ] 
Vetor: [10 20 30 40 ] 
Total de Elementos: 4 
Primeiro: 10 
Último: 40 
Status: Existe elemento 20 
Status: Não Existe elemento 20 
Vetor: [10 30 40 ] 
Vetor: [10 40 ] 
 
 Uma linguagem de programação, orientada à objetos, pode suportar 
e/ou implementar seis (6) propriedades: abstração, encapsulamento, 
18 
polimorfismo, herança, associação (agregação e composição) e classes 
abstratas e concretas. 
 
 
Abstração 
 
 Objetos devem representar dados do mundo real. 
 
Encapsulamento (“encapsulação”) 
 
 Os objetos possuem internamente atributos e métodos agrupados no 
mesmo local, onde os métodos manipulam os atributos. Esta 
característica protege os dados (atributos) de alterações indevidas, 
somente os membros da classe podem acessar os atributos, desde que 
eles sejam privados (private) ou protegidos (protected) (caso das 
classes derivadas, que herdam o direito de acesso aos atributos). 
 
Polimorfismo (grego: “muitas formas”) 
 
É a capacidade de objetos diferentes reagirem segundo a sua 
função a uma ordem padrão. Significa que o nome de um objeto pode ser 
utilizado para vários propósitos ligeiramente diferentes, ou seja, “ 
... uma interface, vários métodos ... ”. A característica de 
polimorfismo é utilizada principalmente na sobrecarga de métodos, 
sobrecarga de operadores e nas classes abstratas, onde os métodos são 
declarados mas não definidos. Como tipos de polimorfismo tem-se: (a) 
Universal (inclusão [como em Java, por exemplo, List lista = new 
LinkedList();] e paramétrico [templates como em C++]) e (b) ad-hoc 
(sobrecarga de métodos e operadores). 
 
• Sobrecarga de operador: Permite sobrecarregar operadores para 
realizar diferentes tipos de operações; 
 
• Sobrecarga de método: Permite que um método retorne diferentes 
tipos de informações e aceite argumentos de vários tipos, 
inclusive com quantidade diferentes de argumentos; 
 
• Classes abstratas e concretas: Permite representar entidades e 
conceitos abstratos, sendo sempre uma superclasse (ou classe 
Base) e não permite ser instanciada, a classe abstrata apenas 
define um modelo (template) para uma funcionalidade e fornece 
uma implementação incompleta que é herdada pelas classes 
derivadas. Cada classe derivada implementa as funcionalidades da 
classe abstrata. Uma classe abstrata pode possuir métodos 
abstratos, mas os métodos são escritos nas classes derivadas 
concretas. Métodos abstratos definem apenas a forma do método 
não contendo nenhum tipo de código. Classes concretas 
implementam todos os métodos e podem ser instanciadas. 
 
Herança 
 
É o processo pelo qual uma classe de objetos pode adquirir as 
propriedades de outra classe de objetos, em outras palavras, um objeto 
herda as características de outro (herança simples) ou vários objetos 
(herança múltipla). A classe Base é chamada de superclasse, enquanto a 
classe derivada pode ser chamada de subclasse. 
 
Associação 
 
É um vínculo que permite que objetos de uma ou mais classes se 
relacionem entre si. Esta associação pode ser: unária (o vínculo é 
19 
entre objetos da mesma classe), binária (vínculo ocorre entre dois 
objetos de classes diferentes) ou múltipla (vínculo ocorre entre mais 
de 2 objetos de classes diferentes). Cada associação pode possuir 
características de (a) cardinalidade ou multiplicidade (indica quantos 
objetos são possíveis em cada associação) e (b) navegação (existe a 
possibilidade dos objetos acessarem outros objetos da mesma 
associação). 
Uma associação pode ser de duas formas: agregação 
(Relacionamento com características onde existe um grau menos intenso 
de coesão entre os elementos, pode haver um certo grau de 
independência) ou composição (relacionamento com características onde 
existe um alto grau de coesão e total grau de dependência entre os 
elementos). 
 
Classes Abstratas e Concretas 
 
Criada para representar entidades e conceitos abstratos. Uma 
classe abstrata é sempre uma superclasse ou classe base que não possui 
instâncias. Ela define apenas o modelo (como um template em C++) para 
uma funcionalidade e fornece uma implementação incompleta chamada de 
parte genérica sendo compartilhada por um conjunto de classes 
derivadas ou subclasses. As classes derivadas completam as funcionali-
dades da classe abstrata anexando um comportamento específico. Classes 
abstratas possuem métodos abstratos. Esses métodos são implementados 
nas suas classes derivadas concretas com o objetivo de definir o 
comportamento específico. O método abstrato define apenas a assinatura 
do método não contendo nenhum código. Classes concretas implementam 
seus métodos e permitem instanciar objetos. Classes concretas não 
possuem métodos abstratos quando são classes derivadas de uma classe 
abstrata. 
 
Vantagens da Orientação a Objetos: (a) reutilização de código, (b) 
proteção aos dados; (c) organização ou estruturação dos dados em forma 
de classes e objetos; (d) sobrecarga de métodos e de operadores; (e) 
criação de pacotes de classes; (f) ter um conjunto de pacotes pré-
definidos e (g) permitir ao desenvolvedor criar seus próprios pacotes. 
 
 Em C#, o programador pode criar suas próprias classes. Uma 
classe possui duas partes distintas: atributos (variáveis) e métodos 
(funções ou procedimentos) que manipulam estes atributos. 
 
3.2.2 Referência this em C# 
 
 Em C#, quando um método de uma classe é chamado, é passado 
automaticamente um argumento que é uma referência para o objeto que 
gerou a chamada. Esta referência é chamada “this”, ou seja, a 
referência “this” referencia o objeto que chamou o método. 
 Cada objeto tem acesso a uma referência a ele próprio, chamada 
this. Esta referência faz referências aos atributos e métodos de um 
objeto. 
 
Exemplo da utilização da referência this em C#: 
 
// -------------------------------------------------------- Data.cs 
 
using System; 
 
namespace Prog4 
{ 
 public class Data{ 
 // ------------------------------- atributos 
 
20 
 private int dia, mes, ano; 
 
 // ------------------------------- construtor 
 
 public Data(int dia, int mes, int ano) { 
 this.dia = dia; 
 this.mes = mes; 
 this.ano = ano; 
 } 
 
 public String toString() 
 { 
 String data = "Data: " + String.Format("{0:00}", dia) + "/"; 
 data = data + String.Format ("{0:00}", mes) + "/"; 
 data = data + String.Format ("{0:0000}", ano) ; 
 return(data); 
 } 
 } 
} 
 
// ----------------------------------------------------------- Prog4.cs 
 
using System; 
 
namespace Prog4 
{ 
 class MainClass 
 { 
 public static void Main (string[] args) 
 { 
 Data data = new Data(7, 6, 2013); 
 
 Console.WriteLine (data.toString ()); 
 } 
 } 
} 
 
Resultado do Programa: 
 
Data: 07/06/2013 
 
3.2.3 Lista de Exercícios sobre Classes em C# 
 
3.2.3.1 Dado o seguinte programa principal, implemente a classe 
Circulo e seus métodos: 
 
// ------------------------------------------ TestaCirculo.cs 
 
using System; 
 
namespace TestaCirculo 
{ 
 class MainClass 
 { 
 public static void Main (string[] args) 
 { 
 Circulo circ = new Circulo(); 
 
 circ.setaRaio(3); 
 circ.calculaArea(); 
 double area = circ.getArea(); 
 Console.WriteLine("Área: " + area); 
 } 
 } 
} 
 2 
Observação: area = pi . raio onde pi é 3.1416 
 
 
Círculo 
double area, raio 
setaRaio 
calculaArea 
21 
getArea 
 Diagrama de classe 
 
3.2.3.2 Dado o seguinte programa principal, implemente a classe 
PesoIdeal e seus métodos: 
 
// --------------------------------------------- Peso.cs 
 
using System; 
 
namespace Peso 
{ 
 class MainClass 
 { 
 public static void Main (string[] args) 
 { 
 PesoIdeal piHomem = new PesoIdeal('H', 1.67); 
 PesoIdeal piMulher = new PesoIdeal('m', 1.65); 
 
 piHomem.calculaPesoIdeal(); 
 Console.WriteLine("Peso Ideal Homem: " + piHomem.getPesoIdeal()); 
 
 piMulher.calculaPesoIdeal(); 
 Console.WriteLine("Peso Ideal Mulher: " + piMulher.getPesoIdeal()); 
 } 
 } 
} 
 
Resultado do Programa: 
 
Peso Ideal Homem: 63,41 
Peso Ideal Mulher: 57,77 
 
Cálculo do Peso Ideal: 
 
PIH = 72,7 x altura – 58 
PIM = 62,1 x altura – 44,7 
 
PesoIdeal 
double altura, pi 
char sexo 
calculaPesoIdeal 
getPesoIdeal 
 Diagrama de classe 
 
3.2.3.3 Dado o seguinte programa principal, implemente a classe 
CPF e seus métodos: 
 
// --------------------------------------------------------------- ValidaCPF.cs 
 
using System; 
 
namespace ValidaCPF 
{ 
 class MainClass 
 { 
 public static void Main (string[] args) 
 { 
 String s = "123456789"; 
 CPF cpf = new CPF(s); 
 
 int digitoVerificador = cpf.verificaCPF(); 
 Console.WriteLine("Digito verificador: {0:00} ", digitoVerificador); 
 Console.WriteLine("CPF: {0}-{1:00}", s , digitoVerificador); 
 } 
 } 
} 
 
Resultado do Programa: 
 
Digito verificador: 09 
CPF: 123456789-09 
 
22 
 
CPF 
String cpf 
int digito 
verificaCPF 
 Diagrama de classe 
	
  
Como calcular os Dígitos do CPF: 
 
Entrada: CPF: 123456789 
 
1) Primeiramente pega-se os dígitos da base do CPF e se faz a soma da multiplicação 
individual dos dígitos, iniciando por 10 e indo até 2 como exemplificado abaixo: 
 
 1 2 3 4 5 6 7 8 9 
 x x x x x x x x x 
 10 9 8 7 6 5 4 3 2 
 -- -- -- -- -- -- -- -- -- 
10 + 18 + 24 + 28 + 30 + 30 + 28 + 24 + 18 = 210 
 
2) O valor do primeiro dígito é o resultado da subtração de 11 pelo resto da divisão da 
soma acima por 11. Se este valor for 10 ou 11, o dígito é 0 (zero), do contrário é o 
próprio valor. No exemplo em questão o dígito encontrado é calculado conforme vê-se a 
seguir: 
 
11 - (210 % 11) = 10 
 
3) O cálculo do segundo dígito é feito da mesma forma que o primeiro, porém com os 9 
dígitos da base do CPF e o primeiro dígito verificador encontrado, iniciando por 11 e 
indo até 2. 
 
 1 2 3 4 5 6 7 8 9 0 
 x x x x x x x x x x 
11 10 9 8 7 6 5 4 3 2 
-- -- -- -- -- -- -- -- -- -- 
11 + 20 + 27 + 32 + 35 + 36 + 35 + 32 + 27 + 0 = 255 
 
4) O valor do segundo dígito é o resultado da subtração de 11 pelo resto da divisão da 
soma acima por 11. Se este valor for 10 ou 11, o dígito é 0 (zero), do contrário é o 
próprio valor. No exemplo em questão o dígito encontrado é calculado conforme vê-se a 
seguir: 
 
11 - (255 % 11) = 9 
 
Saída: CPF válido é 123.456.789-09 ou 123456789-09 
 
3.2.3.4 Dado o seguinte programa principal, implemente a classe 
DiaSemana e seus métodos: 
 
// ------------------------------------------------------- TestaDiaSemana.cs 
 
using System; 
 
namespace TestaDiaSemana 
{ 
 class MainClass 
 { 
 public static void Main (string[] args) 
 { 
 DiaSemana dia = new DiaSemana(17, 11, 2013); 
 
 dia.verificaDiaSemana(); 
 dia.exibeDiaSemana(); 
 } 
 } 
} 
 
Resultado do Programa: 
 
Dia da Semana: Terça-Feira 
 
DiaSemana 
int dia, mes, ano 
String semama 
23 
verificaDiaSemana 
exibeDiaSemana 
 Diagrama de classe 
 
Como calcular o Dia da Semana: 
 
Deve-se calcular o Dia do Século: 
 
Para qualquer cálculo com datas é essencial que se disponha do Dia do Século para a(s) 
data(s) em questão. O Dia do século é o número de dias decorridos desde o inicio do 
século (1º de janeiro de 1901) até a data em questão. Se usa como referência 1901 porque 
a maioria das datas com as quais se trabalha ainda são do século passado. Lá por 2040 ou 
mais poderá se mudar para 2001. 
 
A fórmula (válida para datas entre 1901 e 2099) é a seguinte: 
 
Dia_do_Seculo = (ano - 1901) * 365 + (ano - 1901) DIV 4 + dia + (mês - 1) *31 - [(mês * 
4 + 23) DIV 10] * [(mês + 12) DIV 15] + [(4 - ano MOD 4) DIV 4) * [(mês + 12) DIV 15] 
 
Entrada: Dia [1..31]: 18 
 Mês [1..12]: 12 
 Ano [1901..2099]: 2007 
 
Dia_do_Seculo = 39.068 (para a data acima) 
 
Verificação do Dia da Semana: 
 
Para saber o Dia_da_Semana basta dividir por 7 e entrar com o resto na tabela abaixo: 
 
0 Segunda 
1 Terça 
2 Quarta 
3 Quinta 
4 Sexta 
5 Sábado 
6 Domingo 
 
Saída: 18/12/2007 é uma Terça-Feira 
 
Observação: DIV é divisão inteira de dois números e MOD é o resto inteiro da divisão de 
dois números 
 
3.2.3.5 Dado o seguinte programa principal, implemente a classe 
Data e seus métodos: 
 
// ------------------------------------------------- TestData.cs 
 
using System; 
 
namespace TestData 
{ 
 class MainClass 
 { 
 public static void Main (string[] args) 
 { 
 Data data = new Data(); 
 
 data.setaData(17, 11, 2013); 
 data.extenso(); 
 } 
 } 
} 
 
Resultado do Programa: 
 
Data: 17 de novembro de 2013 
 
Data 
int dia, mes, ano 
setaData 
extenso 
 Diagrama de classe 
24 
 
3.2.3.6 Implemente os métodos “sortForcaBruta” e “bubleSort” na 
classe Vetor vista no item 3.2. 
 
// --------------------------------------------------- Ordena.cs 
 
using System; 
 
namespace Ordena 
{ 
 class MainClass 
 { 
 public static void Main (string[] args) 
 { 
 Vetor v = new Vetor (5); 
 
 v.add (30); 
 v.add (20); 
 v.add (10); 
 v.add (50); 
 v.add (40); 
 v.exibe (); 
 v.add (60); // testar o limite do vetor de 5 elementos 
 v.exibe (); 
 v.sortForcaBruta(); 
 v.exibe(); 
 // v.bubbleSort(); 
 // v.exibe(); 
 } 
 } 
} 
 
3.2.3.7Dado o seguinte programa principal, implemente a classe 
Pessoa e seus métodos. 
 
// --------------------------------------------------- TestaPessoa.cs 
 
using System; 
 
namespace TestaPessoa 
{ 
 class MainClass 
 { 
 public static void Main (string[] args) 
 { 
 Pessoa p1 = new Pessoa(); 
 Pessoa p2 = new Pessoa(); 
 Pessoa p3 = new Pessoa(); 
 
 p1.setaDados("Paulo Roberto", 1962, 'm'); 
 p2.setaDados("Renato Luis", 1965, 'm'); 
 p3.setaDados("Francisco Carlos", 1959, 'm'); 
 p1.calculaIdade(); 
 p2.calculaIdade(); 
 p3.calculaIdade(); 
 p1.exibePessoa(); 
 p2.exibePessoa(); 
 p3.exibePessoa(); 
 } 
 } 
} 
 
Resultado do Programa: 
 
Nome: Paulo Roberto 
Idade: 51 ano(s) 
Sexo: Masculino 
Nome: Renato Luis 
Idade: 48 ano(s) 
Sexo: Masculino 
Nome: Francisco Carlos 
Idade: 54 ano(s) 
Sexo: Masculino 
25 
 
Pessoa 
String nome, ano 
char sexo 
setaDados 
calculaIdade 
exibePessoa 
 Diagrama de classe 
 
3.2.3.8 Dado o seguinte programa principal, implemente a classe 
Pessoa e seus métodos. 
 
// ----------------------------------------------------- TestaPessoaVetor2.cs 
 
using System; 
 
namespace TestaPessoa2 
{ 
 class MainClass 
 { 
 public static void Main (string[] args) 
 { 
 Pessoa [] pessoa = new Pessoa[3]; 
 
 pessoa[0] = new Pessoa(); 
 pessoa[0].setaDados("Paulo Roberto", 1962, 'm'); 
 pessoa[0].calculaIdade(); 
 pessoa[0].exibePessoa(); 
 
 pessoa[1] = new Pessoa(); 
 pessoa[1].setaDados("Renato Luis", 1960, 'm'); 
 pessoa[1].calculaIdade(); 
 pessoa[1].exibePessoa(); 
 
 pessoa[2] = new Pessoa(); 
 pessoa[2].setaDados("Francisco Carlos", 1959, 'm'); 
 pessoa[2].calculaIdade(); 
 pessoa[2].exibePessoa(); 
 } 
 } 
} 
 
Resultado do Programa: 
 
Nome: Paulo Roberto 
Idade: 51 ano(s) 
Sexo: Masculino 
Nome: Renato Luis 
Idade: 53 ano(s) 
Sexo: Masculino 
Nome: Francisco Carlos 
Idade: 54 ano(s) 
Sexo: Masculino 
 
Pessoa 
String nome, ano 
char sexo 
setaDados 
calculaIdade 
exibePessoa 
 Diagrama de classe 
 
3.2.3.9 Dado o seguinte programa principal, implemente a classe 
Pessoa e seus métodos. 
 
// -------------------------------------------------- Sort.cs 
 
using System; 
 
namespace Sort 
{ 
 class MainClass 
 { 
26 
 public static void Main (string[] args) 
 { 
 Pessoa pessoa = new Pessoa(7); 
 
 pessoa.insereDados("Beatriz", 11); 
 pessoa.insereDados("Debora", 13); 
 pessoa.insereDados("Fátima", 15); 
 pessoa.insereDados("Geni", 16); 
 pessoa.insereDados("Carla", 12); 
 pessoa.insereDados("Eva", 14); 
 pessoa.insereDados("Ana", 10); 
 pessoa.exibeDados(); 
 pessoa.sort(); 
 pessoa.exibeDados(); 
 } 
 } 
} 
 
Resultado do Programa: 
 
Lista de Pessoas 
Nome: Beatriz Idade: 11 
Nome: Debora Idade: 13 
Nome: Fátima Idade: 15 
Nome: Geni Idade: 16 
Nome: Carla Idade: 12 
Nome: Eva Idade: 14 
Nome: Ana Idade: 10 
Lista de Pessoas 
Nome: Ana Idade: 10 
Nome: Beatriz Idade: 11 
Nome: Carla Idade: 12 
Nome: Debora Idade: 13 
Nome: Eva Idade: 14 
Nome: Fátima Idade: 15 
Nome: Geni Idade: 16 
 
Pessoa 
String [] nome 
int [] idade 
int n 
insereDados 
exibeDados 
sort 
 Diagrama de classe 
 
3.2.3.10 Dado o seguinte programa principal, implemente a classe 
Agenda e seus métodos. 
 
// ------------------------------------------------------- TestAgenda.cs 
 
using System; 
 
namespace TestAgenda 
{ 
 class MainClass 
 { 
 public static void Main (string[] args) 
 { 
 Agenda agenda = new Agenda(5); 
 
 agenda.insereTelefone("Ana", "99811234"); 
 agenda.insereTelefone("Beatriz", "99812345"); 
 agenda.insereTelefone("Carla", "99813456"); 
 agenda.insereTelefone("Debora", "99814567"); 
 agenda.insereTelefone("Eva", "99815678"); 
 agenda.insereTelefone("Fátima", "99816789"); 
 String fone = "99815678"; 
 String nome = agenda.consultaNome(fone); 
 if (nome.CompareTo("") != 0) { 
 Console.WriteLine("Nome: " + nome + " - Telefone: " + fone); 
 } else { 
 Console.WriteLine("ERRO: Usuário não Encontrado"); 
 } 
27 
 fone = "99810123"; 
 nome = agenda.consultaNome(fone); 
 if (nome.CompareTo("") != 0) { 
 Console.WriteLine("Nome: " + nome + " - Telefone: " + fone); 
 } else { 
 Console.WriteLine("ERRO: Usuário não Encontrado"); 
 } 
 } 
 } 
} 
 
Resultado do Programa: 
 
ERRO: Excedeu limite do Vetor 
Nome: Eva - Telefone: 99815678 
ERRO: Usuário não Encontrado 
 
Agenda 
String [] nome 
String [] fone 
int n 
int max 
insereTelefone 
consultaNome 
 Diagrama de classe 
 
Exemplo da definição de uma classe “Data”: 
 
// ----------------------------------------------- Fonte: Data.cs 
 
using System; 
 
namespace TestaData 
{ 
 public class Data 
 { 
 private int dia, mes, ano; // atributos da classe 
 
 public Data () 
 { 
 } 
 
 public Data(int dia, int mes, int ano) { // construtor da classe 
 this.dia = dia; 
 this.mes = mes; 
 this.ano = ano; 
 } 
 
 // ------------------------------- sobrecarga do método toString 
 
 public String toString() { 
 return(dia + "/" + mes + "/" + ano); 
 } 
 
 } 
} 
 
Programa exemplo que utiliza a classe “Data”: 
 
// --------------------------------------------- Fonte: TestaData.cs 
using System; 
 
namespace TestaData 
{ 
 class MainClass 
 { 
 public static void Main (string[] args) 
 { 
 Data data = new Data(19, 11, 2013); 
 
 Console.WriteLine(data.toString()); 
 } 
 } 
} 
28 
 
Exemplo da definição de uma classe “Calculadora”: 
 
// -------------------------------------------------------- Fonte: Calculadora.cs 
 
using System; 
 
namespace Calc 
{ 
 public class Calculadora 
 { 
 // ............................................. lista de atributos da classe 
 private double x, y, resp; 
 private char op; 
 private int erro; 
 
 // ............................................. métodos públicos da classe 
 public Calculadora () // construtor 
 { 
 erro = 0; 
 } 
 
 // ---------------------------- entradaDados 
 public void entradaDados () 
 { 
 Console.Write ("Digite um Valor: "); 
 String s = Console.ReadLine (); 
 x = Convert.ToDouble (s); 
 do { 
 Console.Write ("Operador [+ - * / Rr Pp Ss Cc Tt]: "); 
 s = Console.ReadLine (); 
 op = s [0]; 
 } while (!strChr ("+-*/RrPpSsCcTt", op)); 
 if (!strChr ("RrSsCcTt", op)) { 
 Console.Write ("Digite outro Valor: "); 
 s = Console.ReadLine (); 
 y = Convert.ToDouble (s); 
 } 
 } 
 
 // ---------------------------- operaCalculadora 
 public void operaCalculadora () 
 { 
 switch (op) { 
 case '+': 
 resp = soma (x, y); 
 break; 
 case '-': 
 resp = subtracao (x, y); 
 break; 
 case '*': 
 resp = multiplicacao (x, y); 
 break;case '/': 
 if (y == 0) 
 erro = 1; // divisao por zero 
 else 
 resp = divisao (x, y); 
 break; 
 case 'R': 
 case 'r': 
 if (x < 0) 
 erro = 2; // raiz negativa 
 else 
 resp = raizQuadrada (x); // Raiz Quadrada 
 break; 
 case 'P': 
 case 'p': 
 resp = power (x, y); // potencia 
 break; 
 case 'S': 
 case 's': 
 resp = seno (x); // seno 
 break; 
 case 'C': 
29 
 case 'c': 
 resp = cosseno (x); // cosseno 
 break; 
 case 'T': 
 case 't': 
 if (x == 90 || x == 180) { 
 erro = 3; 
 } else { 
 resp = tangente (x); // tangente 
 } 
 break; 
 } 
 } 
 
 // ---------------------------- exibeCalculadora 
 public void exibeCalculadora () 
 { 
 if (erro == 1) { 
 Console.WriteLine ("Erro: Divisao por Zero"); 
 } else { 
 if (erro == 2) { 
 Console.WriteLine ("Erro: Raiz Complexa"); 
 } else { 
 if (erro == 3) { 
 Console.WriteLine ("Erro: Tangente Infinita"); 
 } else { 
 Console.WriteLine ("Resposta: " + resp); 
 } 
 } 
 } 
 } 
 
 // ................................................ métodos privados da classe 
 // ---------------------------- strChr 
 private bool strChr (String s, char ch) 
 { 
 for (int i = 0; i < s.Length; i++) { 
 if (s [i] == ch) { 
 return(true); 
 } 
 } 
 return(false); 
 } 
 
 // ---------------------------- soma 
 private double soma (double x, double y) 
 { 
 return(x + y); 
 } 
 
 // ---------------------------- subtracao 
 private double subtracao (double x, double y) 
 { 
 return(x - y); 
 } 
 
 // ---------------------------- multiplicacao 
 private double multiplicacao (double x, double y) 
 { 
 return(x * y); 
 } 
 
 // ---------------------------- divisao 
 private double divisao (double x, double y) 
 { 
 if (y == 0) { 
 erro = 1; 
 return(-1); 
 } 
 return(x / y); 
 } 
 
 // ---------------------------- raizQuadrada 
 private double raizQuadrada (double x) 
 { 
 return(Math.Sqrt (x)); 
30 
 } 
 
 // ---------------------------- power 
 private double power (double x, double y) 
 { 
 return(Math.Pow (x, y)); 
 } 
 
 // ---------------------------- seno 
 private double seno (double x) 
 { 
 const double pi = 3.14158; 
 double rads; 
 
 rads = x * pi / 180.0; 
 return(Math.Sin (rads)); 
 } 
 
 // ---------------------------- cosseno 
 private double cosseno (double x) 
 { 
 const double pi = 3.14158; 
 double rads; 
 
 rads = x * pi / 180.0; 
 return(Math.Cos (rads)); 
 } 
 
 // ---------------------------- tangente 
 private double tangente (double x) 
 { 
 const double pi = 3.14158; 
 double rads; 
 
 rads = x * pi / 180.0; 
 return(Math.Tan (rads)); 
 } 
 } 
} 
 
Programa exemplo que utiliza a classe “Calculadora”: 
 
// ---------------------------------------------- Fonte: Calc.cs 
 
using System; 
 
namespace Calc 
{ 
 class MainClass 
 { 
 public static void Main (string[] args) 
 { 
 Calculadora calc = new Calculadora(); 
 
 calc.entradaDados(); 
 calc.operaCalculadora(); 
 calc.exibeCalculadora(); 
 } 
 } 
} 
 
Modificadores de Acesso: 
 
• public: Os atributos e métodos tornam-se públicos, ou seja, 
qualquer outro método pode chamar ou utilizar estes atributos 
e/ou métodos. 
 
• private: Somente os métodos da classe (membros) da classe podem 
chamar ou utilizar atributos ou métodos privados. 
 
• protected: Utilizado em herança simples de classe (construção de 
subclasses), ou seja, uma subclasse herda todos os atributos e 
31 
métodos da classe base (superclasse). Deixa acessível os 
atributos e/ou métodos para todas as outras classes (classe 
base) e subclasses (classe derivada). 
 
3.3 Sobrecarga de métodos em C# 
 
CSharp permite que métodos estáticos sejam sobrecarregados, 
desta forma, o retorno, número de argumentos ou mesmo o tipo de dados 
dos argumentos possam ser diferentes. 
 
// ------------------------------------------ Fonte: SobreCarga.cs 
 
using System; 
 
namespace SobreCarga 
{ 
 class MainClass 
 { 
 public static void Main (string[] args) 
 { 
 imprime ("Pelotas-RS"); 
 imprime (123.45); 
 imprime (123.45f); 
 imprime (123); 
 imprime ('A'); 
 } 
 
 static void imprime (String s) 
 { 
 Console.WriteLine ("String: " + s); 
 } 
 
 static void imprime (double d) 
 { 
 Console.WriteLine ("Double: " + d); 
 } 
 
 static void imprime (float f) 
 { 
 Console.WriteLine ("Float: " + f); 
 } 
 
 static void imprime (int i) 
 { 
 Console.WriteLine ("Inteiro: " + i); 
 } 
 
 static void imprime (char ch) 
 { 
 Console.WriteLine ("Caracter: " + ch); 
 } 
 } 
} 
 
Resultado do programa: 
 
String: Pelotas-RS 
Double: 123,45 
Float: 123,45 
Inteiro: 123 
Caracter: A 
 
3.4 Ponteiros, referências e endereços em C# 
 
A seguir são mostrados alguns conceitos e diferenças entre 
Ponteiros, Referências e Endereços. 
 
Endereço é um local na memória aonde um dado está armazenado, ou seja, 
corresponde a uma posição de memória capaz de armazenar os dados de um 
programa com um determinado quantidade de bytes. 
32 
 
Ponteiro é um tipo de dado (variável) que permite acessar um endereço 
qualquer. 
 
Referência é um grau de abstração de um endereço mas de forma que o 
programador não pode alterar, somente usá-lo. É uma referência a um 
item de dados ou a um objeto. O programador/compilador não pode 
manipular uma referência diretamente. 
 
 
 
// ------------------------------------------ Fonte: Ponteiro.cs 
 
using System; 
 
namespace Ponteiro 
{ 
 class MainClass 
 { 
 public static void Main (string[] args) 
 { 
 unsafe { // é necessário configurar para executar 
 char x = 'A'; 
 char *p; 
 
 p = &x; // p recebe o endereço de x (&x) 
 Console.WriteLine("Valor de x...: {0}", x); // *p valor é 65 
 Console.WriteLine("Caracter ....: {0}", *p); // caracter 'A' 
 } 
 } 
 } 
} 
 
Resultado do programa: 
 
Valor de x...: A 
Caracter ....: A 
 
Observação: Para utilizar este código é necessário configurar o compilador ou ambiente 
de programação (Permitir código inseguro). 
 
 
Resumo: x -> 65 
 &x -> 100 
33 
 p -> &x -> 100 
 *p -> 65 
 &p -> 200 
 
 
Definição: 
 
 tipo_dado_base *nome_do_ponteiro; 
 
tipo_dado_base: qualquer tipo básico válido em C#. 
nome_da_ponteiro: nome da variável que representa o ponteiro. 
 
 O tipo de dados do ponteiro define para que tipos de variáveis o 
ponteiro pode apontare qual o tamanho ocupado na memória por estas 
variáveis. 
 
Operadores de ponteiros 
 
& - endereço de memória do operando. 
* - conteúdo do endereço apontado pelo ponteiro. 
 
Exemplo: ponteiro = &variável; 
 
Logo: variável = *ponteiro; 
 
4. Métodos de entrada e saída de dados 
 
 
 A seguir são mostrados alguns métodos que permitem fazer entrada 
de dados via teclado e saída de dados via monitor (tela). 
 
4.1 Entrada e saída de dados usando TextReader e TextWriter 
 
 A seguir é visto um exemplo de entrada de dados usando as 
classes TextReader e TextWriter. 
 
Programa exemplo: Entrada de Dados via teclado em terminal de texto 
usando a classe TextReader e saída via monitor utilizando a classe 
TextWriter. 
 
// ---------------------------------------------- Fonte: Input.cs 
 
using System.IO; 
 
namespace Input 
{ 
 class MainClass 
 { 
 public static void Main (string[] args) 
 { 
 TextReader leitor = System.Console.In; 
 TextWriter escritor = System.Console.Out; 
 escritor.Write("Digite seu nome: "); 
 string nome = leitor.ReadLine(); 
 escritor.WriteLine("Número de Caracteres: {0}", nome.Length); 
 } 
 } 
} 
 
Resultado do Programa: 
 
Digite seu nome: Paulo Roberto Gomes Luzzardi 
Número de Caracteres: 28 
 
34 
 
 
 
 
4.2 Entrada e saída de dados utilizando Console 
 
 A seguir é visto outra forma de entrada e saída utilizando a 
classe Console. 
 
Programa exemplo: Entrada de dados via teclado em caixa de diálogo 
gráfica sobreposta a interface usando a classe Console. 
 
// --------------------------------------------- Fonte: EntradaSaida.cs 
 
using System; 
 
namespace EntradaSaida 
{ 
 class MainClass 
 { 
 public static void Main (string[] args) 
 { 
 Console.Write("Digite seu Nome: "); 
 string nome = Console.ReadLine(); 
 Console.WriteLine("Número de Caracteres: {0}", nome.Length); 
 } 
 } 
} 
 
Resultado do Programa: 
 
Digite seu nome: Paulo Roberto Gomes Luzzardi 
Número de Caracteres: 28 
 
4.3 Leitura de uma tecla em C# (pausa por teclado) 
 
 Em C# é possível ler via teclado uma tecla. 
 
// --------------------------------------------- Fonte: Caracter.cs 
 
using System; 
 
namespace Caracter 
{ 
 class MainClass 
 { 
 public static void Main (string[] args) 
 { 
 for (int ch = 0; ch < 255; ch++) { 
 Console.Write ("Código: " + ch + " - Caracter: " + (char)ch); 
 Console.ReadKey (); 
 } 
 } 
 } 
} 
 
Resultado do Programa: 
 
Código: 35 - Caracter: # 
Código: 36 - Caracter: $ 
Código: 37 - Caracter: % 
Código: 38 - Caracter: & 
Código: 39 - Caracter: ' 
Código: 40 - Caracter: ( 
Código: 41 - Caracter: ) 
Código: 42 - Caracter: * 
Código: 43 - Caracter: + 
Código: 44 - Caracter: , 
Código: 45 - Caracter: - 
Código: 46 - Caracter: . 
Código: 47 - Caracter: / 
35 
Código: 48 - Caracter: 0 
Código: 49 - Caracter: 1 
Código: 50 - Caracter: 2 
Código: 51 - Caracter: 3 
Código: 52 - Caracter: 4 
5. Operadores em C# 
 
 São símbolos especiais que obrigam o compilador a executar 
determinadas operações. Estas operações podem ser aritméticas, 
comparativas ou lógicas. 
 
5.1 Operadores aritméticos em C# 
 
 São operadores que realizam uma operação matemática. 
Tabela 3: Operadores aritméticos 
Operador aritmético Ação 
- Subtração 
+ Adição 
* Multiplicação 
/ Divisão 
% Resto inteiro da divisão 
-- ++ Decremento/incremento 
 
Precedência dos operadores aritméticos (Hierarquia nas Operações) 
 
Tabela 4: Precedência dos operadores aritméticos 
Hierarquia Operação 
1 Parênteses 
2 Métodos 
3 ++ -- 
4 - (menos unário) 
5 * / % 
6 + - 
 
Observação: Quando houver duas ou mais operações de mesma hierarquia, 
o compilador executa-as da esquerda para a direita. 
 
5.2 Operadores relacionais em C# 
 
 São operadores que permitem comparar valores, ou seja, são 
utilizados principalmemte em comandos que possuem condições. 
 
Tabela 5: Operadores relacionais 
Operador Ação 
> Maior que 
>= Maior ou igual a 
< Menor que 
<= Menor ou igual 
== Igual a 
!= Diferente de 
 
5.3 Operadores lógicos em C# 
 
 São operadores utilizados em comandos que tem mais de uma 
condição. 
 
Exemplo: if (condição1 && condição2 || condição3) 
 
Tabela 6: Operadores lógicos 
36 
Operador lógica Ação 
&& ou & AND (e) 
|| ou | OR (ou) 
! NOT (não) 
 
Observação: $$ e || são chamados Short Circuit Operator, ou seja, 
quando o resultado das condições não puder mais ser alterado, há um 
truncamento nas próximas condições. 
 
Precedência (Hierarquia dos operadores) 
 
Tabela 7: Precedência dos operadores relacionais e lógicos 
Hierarquia Operação 
1 ! 
2 > >= < <= 
3 == != 
4 && 
5 || 
 
Observação: As expressões que utilizam operadores relacionais e 
lógicos retornam 0 (zero) para falso e !0 (não zero) para verdadeiro, 
ou seja: 
 
true é diferente de 0 (!= 0) e false é igual 0 (== 0) 
 
5.4 Incremento e decremento em C# 
 
 São operadores aritméticos que permitem realizar operações de 
soma e subtração de forma simplificada. 
 
ü ++ adiciona (1) ao operando 
ü subtrai (1) ao operando 
 
 As seguintes operações são equivalentes: 
 x++; x = x + 1; 
 x--; x = x - 1; 
 
Observação: 
 
 Os operadores (++ ou --) podem ser colocados antes ou depois do 
operando. Quando precede seu operando, C# efetua a operação de 
incremento ou decremento antes de utilizar o valor do operando. Quando 
o operador vier depois do operando, C# utiliza o valor do operando 
antes de incrementá-lo ou decrementá-lo. 
 
Exemplo: 
 Equivalência 
 
 x = 10; // y será 11 x = 10; 
 y = ++x; // x será 11 x = x + 1; 
 y = x; 
 
 x = 10; // y será 10 x = 10; 
 y = x++; // x será 11 y = x; 
 x = x + 1; 
5.5 Operador de atribuição em C# 
 
 O operador de atribuição é o sinal de igual =. A sintaxe do 
operador de atribuição pode ser escrito em uma das seguintes formas: 
 
37 
 variável = constante; x = 3; 
 variável = variável; x = y; 
 variável = expressão; x = a + b; 
 variável = método(x); x = Math.sqrt(y); 
 
Programa exemplo: O programa calcula a idade de uma pessoa. 
 
// ------------------------------------------ Fonte: Operadores.cs 
 
using System; 
 
namespace Operadores 
{ 
 class MainClass 
 { 
 public static void Main (string[] args) 
 { 
 // leitura do ano atual 
 Console.Write("Ano ATUAL: "); 
 String s = Console.ReadLine(); 
 int ano_atual = Convert.ToInt32 (s); 
 
 Console.Write("Ano de NASCIMENTO: "); 
 s = Console.ReadLine(); 
 
 // leitura do ano de nascimento 
 int ano_nasceu = Convert.ToInt32(s); 
 
 // atribuição – cálculo da idade 
 int idade = ano_atual - ano_nasceu; 
 Console.WriteLine("Sua IDADE é " + idade + " anos"); 
 } 
 } 
} 
 
Resultado do Programa: 
 
Ano ATUAL: 2013 
Ano de NASCIMENTO: 1962 
Sua IDADE é 51 anos 
 
 A linguagem de programação CSharp permite utilizar o operador de 
atribuição em expressões, junto com operadores matemáticos, lógicos, 
relacionais, chamada de métodos, e outros (como foi mencionado acima). 
 
if ((produto = x * y) < 0) 
 
Funcionamento: Primeiramente C# atribui o valor x * y a variável 
produto, para depois avaliar a expressão, ou seja, comparar se o 
produto é menor (<) que zero. 
 
5.6 Casts em C# 
 
 É possível forçar que o resultado de uma expressão seja de um 
determinado tipo. Para tanto deve ser utilizado uma construção chamada 
de cast, ou seja, pode ser utilizado para "tipar" uma variável com um 
tipo diferente do resultado da expressão. 
 
variável = (tipo) expressão; 
 
Programa exemplo: O programa imprime na tela o resultado de uma 
divisão. 
 
// -------------------------------------------- Fonte: Cast.cs 
 
using System; 
 
namespace Cast 
38 
{ 
 class MainClass

Continue navegando