1. Introdução ao C#
Leonardo Melo Santos
http://about.me/leonardomelosantos
2. Conteúdo programático
● Estrutura da linguagem
● Entrada e saída com Console
● Tipos
● Variáveis
● Operadores
● Conversão de dados
● Tratamento de erros
3. Características
● Linguagem criada por Anders Heijsberg, criador do
Delphi;
● Orientada a objetos;
● Não suporta herança múltipla;
● Tem um coletor de lixo (Garbage Collector);
● Se quiser, pode usar ponteiros de memória (unsafe);
● Influenciada por C++, Object Pascal e Java;
4. Características
● Case sensitive;
● Fortemente tipada;
● Comandos são finalizados com ";"
● Bloco de código definidos por chaves;
○ Possibilidade de aninhamento de blocos;
5. Método Main()
● Execução da aplicação se inicia pelo
método Main();
● Quatro diferentes assinaturas podem ser
utilizadas:
○ public static void Main()
○ public static int Main()
○ public static void Main(string[] args)
○ public static int Main(string[] args)
6. Classe Console
● Interface textual com o usuário;
● Utilizada principalmente para entrada e
saída de dados;
● Pertence ao Namespace System;
● Leitura de dados:
○ Console.Read()
○ Console.ReadLine()
● Escrita de dados:
○ Console.Write()
○ Console.WriteLine()
7. Console - Leitura de dados
● Console.Read()
○ Lê um caractere digitado
○ Retorna seu valor em código ASCII
○ Retorna após finalizar comando (Tecla <Enter>)
● Console.ReadLine()
○ Lê todo o texto
○ Também retorna após o <Enter>
char letra = (char) Console.Read();
string texto = Console.ReadLine();
8. Escrita de dados
● Console.Write()
○ Escreve na linha de comando
○ “Cursor” continua após o texto
● Console.WriteLine()
○ Escreve na linha de comando
○ “Cursor” passa para a próxima linha
Console.Write(“Escreve");
Console.WriteLine(“Escreve e quebra linha");
9. Tipos no C#
● Tipos inteiros:
○ byte, sbyte ( 8 bits )
○ short, ushort (16 bits)
○ int, uint (32 bits)
○ long, ulong ( 64 bits)
● Tipos de ponto flutuante:
○ float (precisão de 7 digitos)
○ double (precisão de 15 a 16 digitos)
10. Tipos no C#
● Tipo de exatidão numérica:
○ decimal (precisão de 28 casas decimais)
● Tipos de caracter
○ char (caracter simples)
○ string (tipo por referencia, vários caracteres)
● Tipo booleano
○ bool
■ permite apenas 2 tipos de valores: true ou false
■ 1 ou 0 não podem ser usados
11. Operadores
● Operadores aritméticos binários
○ Soma (+), subtração (-), divisão (/) e multiplicação (*)
○ Módulo ( % )
● Operadores lógicos:
○ and (&&), or (||) , not (!)
● Operadores Relacionais:
○ igual (==), diferente (ou não-igual) (!=)
○ menor (<), maior (>), maior ou igual (>=), menor ou
○ igual (<=)
● Operador de atribuição
○ Atribuição (=)
12. Incremento e decremento
Operadores ++ e --
● Ordem é importante
○ Antes - calcula e depois retorna o valor
○ Depois – retorna o valor e depois calcula
int quantidade = 10;
quantidade++;
int qtd = ++quantidade;
13. Nomes de variáveis
● Não podem iniciar com números ou
caracteres especiais;
● Underscore ( _ ) é permitido;
● Boas práticas:
○ Propriedade começando com letra maiúscula;
○ Nomes de mpetodos começando com letra
maiúscula;
○ Variáveis dentro de métodos começando com letras
minúsculas;
○ Não colocar espaçamento antes ou depois do "=" ao
atribuir valores em variáveis;
14. Notações
● Notação Pascal
○ NomeDaVariavel
○ Geralmente usada para métodos e propriedades
(atributos de classe)
● Notação Camelo
○ nomeDaVariavel
○ Geralmente usada para variáveis locais
● Notação Húngara
○ preNomeVariavel
○ Prefixo define o tipo
○ Nomes de controles e interfaces (txtNome, cboUF)
15. Conversão de tipos
Existem quatro formas de conversão:
● Implícita
● Explícita
● Classe System.Convert
● Métodos Parse()
16. Coversão implícita
● Conversão de tipos equivalentes
● O menor se transforma no maior
int valor = 40;
double valorMaior = valor;
17. Conversão explícita
Tentativa de transformar valores compatíveis, mas não
necessariamente tipos de dados compatíveis.
int menor = 30;
byte valor = menor; // Erro de compilação
valor = (byte)menor; // Conversão. Ufa, funcionou!
menor = 300;
valor = (byte)menor; // Overflow! Erro em
tempo de execução
18. Conversão via classe Convert
● Namespace System
● Contém métodos de conversão
○ Convert.ToInt32()
○ Convert.ToDateTime()
○ Convert.ToDouble()
○ ...
19. Converção via parse()
Geralmente usado para converte texto em
número
string valorEmTexto = "1000";
int valorEmInt = int.Parse(valorEmTexto);
double valorDouble = double.Parse
(valorEmTexto);
Int32 valorInt32 = Int32.Parse(valorEmTexto);
Double valorDoubleWrapper =
Double.Parse(valorEmTexto);
20. Exercícios
1. Criar Console Application
Escrever autor do código na tela; Perguntar a idade; Se a idade
for maior que 29, incrementa a idade; Se a idade for menor ou
igual a 29, decrementa a idade; Mostrar a nova idade na tela;
2. Calcular o volume de uma caixa retangular e
mostrar o resultado na tela.
3. Converter a temperatura em graus Fahrenheit para
graus Celsius. Função: C = ((F - 32) * 5/9);
22. O que é Enum?
● São constantes fortemente tipadas, em que
é possível determinar quais os únicos
valores aceitáveis para uma variável;
● Chegou para substituir as tradicionais
constantes, que na verdade sempre foram
tratadas como variáveis tradicionais de
algum tipo primitivo;
23. Constante x Enum
Exemplo de uso de constante sem Enum
public static TIPOS_BANCO_SQLSERVER = 1;
public static TIPOS_BANCO_ORACLE = 2;
public static TIPOS_BANCO_MYSQL = 3;
public static TIPOS_BANCO_POSGRESQL = 4;
Exemplo de uso de constante com Enum
public enum ModeloBancoDados {
SQLServer = 1,
Oracle = 2,
MySQL = 3,
PosgreSQL = 4
}
24. Consultando itens de um Enum
String[] bancos = Enum.GetNames(typeof
(ModeloBancoDados));
foreach(String elemento in bancos)
{
Console.WriteLine(elemento);
}
25. Exercício
1. Criar três constantes que identificarão três
categorias de automóvel. Em seguida, criar
um Enum que possuirám as mesmas
categorias definidas nas constantes. Em
seguida criar dois métodos estáticos (com
mesmo nome) só que um deles vai receber
um Enum como parâmetro e o outro vai
receber uma constante tradicional. Dentro
de cada método, implementar exibição no
Console de qual valor foi passado.
27. Tratando erros em .NET
● Erros são vistos como objetos
● Definidos através de uma Exceção
● Exceções possuem:
○ Mensagem de erro
○ Referência ao objeto que lançou o erro
○ Caminho de execução até o erro
● Toda exceção herda de System.Exception
28. Propriedades de uma Exception
● Message: Propriedade somente leitura que
contém um texto descritivo do erro
● InnerException: Caso a exceção tenha sido
causada por outra exceção, essa
propriedade retorna a referência a ela
● Source: O nome da aplicação ou do objeto
que causou o erro
● StackTrace: Uma string que representa as
chamadas da pilha no momento em que a
exceção foi lançada.
29. Tratando Exceptions
● Códigos que possam lançar exceções devem
ser tratados
● Bloco try, catch, finally
○ try: código a ser executado
○ catch: estrutura semelhante ao switch, testa o tipo
da exceção e executa o tratamento
○ finally: bloco de código que é sempre executado,
ocorrendo um erro ou não
30. Blocos try, catch e finally
try {
int numero = Convert.ToInt32("Texto");
} catch (FormatException fe) {
Console.WriteLine(fe.Message);
} catch (Exception ex) {
Console.WriteLine("Erro genérico!");
} finally {
Console.WriteLine("Código sempre executa!");
}