introdu o linguagem c n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
Introdução à Linguagem C # PowerPoint Presentation
Download Presentation
Introdução à Linguagem C #

Loading in 2 Seconds...

play fullscreen
1 / 107

Introdução à Linguagem C # - PowerPoint PPT Presentation


  • 120 Views
  • Uploaded on

Introdução à Linguagem C #. Prof.Dr. Antonio Geraldo da Rocha Vidal EAD-5881 - Tecnologia de Informática FEA/USP. Hello World. using System; class Hello { static void Main( ) { Console.WriteLine(“Olá Mundo!"); Console.ReadLine(); // Enter para finalizar } }.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'Introdução à Linguagem C #' - johnna


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
introdu o linguagem c

Introdução àLinguagem C#

Prof.Dr. Antonio Geraldo da Rocha Vidal

EAD-5881 - Tecnologia de Informática

FEA/USP

hello world
Hello World

using System;

class Hello {

static void Main( ) {

Console.WriteLine(“Olá Mundo!");

Console.ReadLine(); // Enter para finalizar

}

}

metas de projeto do c
Metas de projeto do C#
  • Orientação para componentes
  • Tudo é objeto
  • Construção de software robusto e durável
  • Integração ao software já existente, preservando investimentos.
metas de projeto do c orienta o para componentes
Metas de projeto do C# Orientação para Componentes
  • C# pode ser considerada uma linguagem orientada para objetos e componentes da família do C/C++
  • O que é um componente?
    • Um módulo independente quanto a desenvolvimento e reutilização
    • Menos granulares que objetos
      • Os objetos são construções ao nível da linguagem
      • Os componentes são construções ao nível da aplicação
    • Inclui múltiplas classes
    • Freqüentemente independentes da linguagem
    • Em geral, o desenvolvedor e o usuário de componentes não se conhecem, não trabalham para a mesma empresa e não utilizam a mesma linguagem de programação
metas de projeto do c orienta o para componentes1
Metas de projeto do C# Orientação para Componentes
  • Conceitos de componentes:
    • Propriedades, métodos, eventos
    • Atributos de projeto (design-time) e de execução (run-time)
    • Documentação integrada usando XML
  • Permitem “one-stop programming”
    • Sem arquivos de cabeçalho, IDL, etc.
    • Podem ser embutidos nas páginas ASP
metas de projeto do c tudo objeto
Metas de projeto do C# Tudo é Objeto
  • Visões tradicionais:
    • C++, Java™: os tipos primitivos são “mágicos” e não interoperam com objetos
    • Smalltalk, Lisp: os tipos primitivos são objetos, mas com um grande custo de desempenho
  • C# unifica estas visões com bom desempenho
    • Grande simplicidade ao longo de todo sistema
  • Extensibilidade e reusabilidade aprimorados:
    • Novos tipos primitivos: Decimal, SQL…
    • Coleções, etc., trabalham com todos os tipos
metas de projeto do c software robusto e dur vel
Metas de projeto do C# Software Robusto e Durável
  • Coletor de lixo
    • Nenhum vazamento de memória e ponteiros perdidos
  • A manipulação de exceções é padronizada
  • Estrutura “tipada” e segura
    • Nenhuma variável sem inicialização, nenhum conteúdo inseguro
  • Versionamento
  • Evita erros comuns
    • Por exemplo: if (x = y) ...
  • Programação “sem escalas” (one-stop programming)
    • Menos “partes móveis”
metas de projeto do c preservar investimentos
Metas de projeto do C# Preservar Investimentos
  • Heranças do C++:
    • Namespaces, pointers (em código inseguro), unsigned types, etc.
    • Algumas mudanças, mas nenhum sacrifício desnecessário
  • Interoperabilidade
    • Todo software precisa estar integrado
    • C# fala com XML, SOAP, COM, DLLs, e qualquer linguagem compatível com o .NET Framework
  • Produtividade aumentada
    • Curva aprendizado pequena
    • Há milhões de linhas de código C# na plataforma .NET
tipos de objetos vis o
Tipos de ObjetosVisão
  • Um programa C# é uma coleção de tipos de objetos:
    • Classes, structs, enums, interfaces, delegates
  • C# fornece um conjunto de tipos predefinidos
    • Isto é: int, byte, char, string, object
  • Você pode criar seus próprios tipos
  • Todos os dados e códigos são definidos dentro de um tipo de objeto:
    • Nenhuma variável global, nenhuma função global
tipos de objetos vis o1
Tipos de Objetos Visão
  • Os tipos de objeto podem conter:
    • Dados
      • Campos, constantes, arrays
      • Eventos
    • Funções
      • Métodos, operadores, construtores, destruidores
      • Propriedades, indexadores
    • Outros tipos
      • Classes, structs, enums, interfaces, delegates
tipos de objetos vis o2
Tipos de Objetos Visão
  • Os tipos de objetos podem ser instanciados:
    • …e então usados: chamar métodos, obter e configurar propriedades, etc.
  • Pode-se converter de um tipo de objeto para outro:
    • Implicitamente e explicitamente
  • Os tipos de objetos são organizados fisicamente em arquivos:
    • Namespaces, files, assemblies
  • Os tipos são organizados logicamente em uma hierarquia
  • Existem duas categorias de tipos:valor e referência
tipos de objetos sistema unificado de tipos

i

123

s

“Olá pessoal!"

Tipos de Objetos Sistema Unificado de Tipos
  • Tipos de valor
    • Contém dados
    • Não podem ser nulos
  • Tipos de referência
    • Contém referências a objetos
    • Podem ser nulos

int i = 123;

string s = “Olá pessoa!";

tipos de objetos sistema unificado de tipos1
Tipos de Objetos Sistema Unificado de Tipos
  • Tipos de valor
    • Primitivos int i; float x;
    • Enumerações enum State { Off, On }
    • Estruturas struct Point {int x,y;}
  • Tipos de referência
    • Root object
    • String string
    • Classes class Foo: Bar, IFoo {...}
    • Interfaces interface IFoo: IBar {...}
    • Arrays string[] a = new string[10];
    • Delegates delegate void Empty();
tipos de objetos sistema unificado de tipos3
Tipos de Objetos Sistema Unificado de Tipos
  • Benefícios de tipos de valor:
    • Nenhuma alocação volumosa
    • Uso mais eficiente da memória
    • Menos referência indireta
    • Sistema de tipo unificado
      • Sem a dicotomia PRIMITIVO X OBJETO
tipos de objetos convers es
Tipos de Objetos Conversões
  • Conversões implícitas
    • Ocorrem automaticamente
    • Garantia de sucesso
    • Nenhuma perda na precisão das informações
  • Conversões explícitas
    • Exige um elenco
    • Podem não ter sucesso
    • Informações (precisão) podem ser perdidas
  • Ambas conversões implícitas e explícitas podem ser definidas pelo usuário
tipos de objetos convers es1
Tipos de Objetos Conversões

int x = 123456;

long y = x; // implícita

short z = (short)x; // explícita

double d = 1.2345678901234;

float f = (float)d; // explícita

long l = (long)d; // explícita

tipos de objetos sistema unificado de tipos4
Tipos de Objetos Sistema Unificado de Tipos
  • Tudo é objeto:
    • Em última instância, todos os tipos são herdados de objetos.
    • Qualquer pedaço de dados pode ser armazenado, transportado, e manipulado sem trabalho extra.
tipos de objetos sistema unificado de tipos5
Tipos de Objetos Sistema Unificado de Tipos
  • Polimorfismo
    • A habilidade de usar ou armazenar um objeto sem saber seu tipo preciso

void Poli(object o) {

Console.WriteLine(o.ToString());

}

Poli(42);

Poli(“abcd”);

Poli(12.345678901234m);

Poli(new Point(23,45));

tipos de objetos sistema unificado de tipos6
Tipos de Objetos Sistema Unificado de Tipos
  • Observação: os tipos de valor e de referência têm semântica muito diferentes
  • Pergunta: como podemos tratar os tipos de valor e de referência polimorficamente?
    • Como um int (tipo valor) pode ser convertido em um objeto (tipo referência)?
    • Como podemos unificar tipos de valor e de referência?
  • Solução: Boxing!
tipos de objetos sistema unificado de tipos7
Tipos de Objetos Sistema Unificado de Tipos
  • Boxing copia um tipo valor para um tipo referência
  • Unboxing faz a cópia inversa

123

i

int i = 123;

object o = i;

int j = (int)o;

System.Int32

o

123

123

j

tipos de objetos sistema unificado de tipos8
Tipos de Objetos Sistema Unificado de Tipos
  • Boxing
    • Copia um tipo valor para um tipo referência (objeto)
    • Cada tipo valor tem o correspondente (“hidden”) tipo referência
    • Note que uma cópia de valor referência é feita pelo tipo valor.
      • Os tipos de valor nunca são aliased
    • O tipo valor é convertido implicitamente para objeto, um tipo referência
      • Essencialmente um “up cast”
tipos de objetos sistema unificado de tipos9
Tipos de Objetos Sistema Unificado de Tipos
  • Unboxing
    • Operação inversa de boxing
    • Copia o valor para fora do box
      • Cópia do tipo referência para o tipo valor
    • Exige uma conversão de explícita
      • Pode não ser bem-sucedido
      • Essencialmente um “down cast”
tipos de objetos sistema unificado de tipos10
Tipos de Objetos Sistema Unificado de Tipos
  • Benefícios
    • Habilita polimorfismo através de todos os tipos
    • Classes de coleção trabalham com todos os tipos
    • Elimina a necessidade de classes para conversão
    • Substitui o OLE Automation's Variant
  • Muitos exemplos na .NET Framework

Hashtable t = new Hashtable();

t.Add(0, "zero");

t.Add(1, "one");

t.Add(2, "two");

string s = string.Format(

“Sua nota foi {0} em um total de {1}", date);

tipos de objetos pr definidos
Tipos de Objetos Pré-definidos
  • Valor
    • Integral types
    • Floating point types
    • decimal
    • bool
    • char
  • Referência
    • object
    • string
tipos predefinidos tipos valor
Tipos predefinidosTipos Valor
  • Todos são estruturas (structs) predefinidas
tipos predefinidos tipos ponto flutuante
Tipos predefinidosTipos Ponto Flutuante
  • Segue a especificação IEEE 754
  • Suporta ± 0, ± Infinito, NaN
tipos predefinidos decimal
Tipos predefinidosdecimal
  • 128 bits
  • Essencialmente um valor 96 bit elevado à uma potência de 10
  • Valores decimais são representados precisamente
  • Não suporta zeros com sinais, infinito ou NaN
tipos predefinidos decimal1
Tipos predefinidosdecimal
  • Todos os tipos inteiro podem ser implicitamente convertidos para um tipo decimal
  • As conversões entre decimal e tipos flutuantes exigem conversão explícita devido à possibilidade de perda de precisão
  • s * m * 10e
    • s = 1 or –1
    • 0  m  296
    • -28  e  0
tipos predefinidos inteiros literais
Tipos predefinidosInteiros Literais
  • Integer literals podem ser expressos como decimal ou hexadecimal
  • U ou u: uint ou ulong
  • L ou l: long ou ulong
  • UL ou ul: ulong

123 // Decimal

0x7B // Hexadecimal

123U // Unsigned

123ul // Unsigned long

123L // Long

tipos predefinidos reais literais
Tipos predefinidosReais Literais
  • F ou f: float
  • D ou d: double
  • M ou m: decimal

123f // Float

123D // Double

123.456m // Decimal

1.23e2f // Float

12.3E1M // Decimal

tipos predefinidos booleano
Tipos predefinidosbooleano
  • Representa valores lógicos
  • Os valores literais são true e false
  • Não se pode usar 1 e 0 como valores booleanos
    • Nenhuma conversão padrão entre outros tipos e booleano
tipos predefinidos char
Tipos predefinidoschar
  • Representa um caractere Unicode
  • Literais
    • ‘A’ // Caractere simples
    • ‘\u0041’ // Unicode
    • ‘\x0041’ // Hexadecimal pequeno sem sinal
    • ‘\n’ // Caractere ecape
tipos predefinidos char1
Tipos predefinidoschar
  • Caracteres de seqüência de fuga (lista parcial)
tipos predefinidos object
Tipos predefinidosobject
  • Raiz da hierarquia de objetos
  • Armazenamento (book keeping)
    • 0 bytes para tipos valor
    • 8 bytes para tipos referência
  • Uma referência real (não um objeto) usa 4 bytes
tipos predefinidos object m todos p blicos
Tipos predefinidosobject Métodos Públicos
  • public bool Equals(object)
  • public bool ReferenceEquals(object)
  • protected void Finalize()
  • public int GetHashCode()
  • public System.Type GetType()
  • protected object MemberwiseClone()
  • public void Object()
  • public string ToString()
tipos predefinidos string
Tipos predefinidosstring
  • Uma seqüência de caracteres Unicode (“imutável”)
  • Tipo referência
  • Sintaxe especial para literais
    • string s = “Eu sou uma string”;
tipos predefinidos string1
Tipos predefinidosstring
  • Normalmente precisam ser utilizados caracteres de fuga:
  • Strings literais:
    • A maioria de seqüências fuga são ignoradas
      • Com exceção de “”
    • Literais podem ter múltiplas linhas

string s1= “\\\\server\\fileshare\\filename.cs”;

string s2 = @“\\server\fileshare\filename.cs”;

tipos de objetos enums
Tipos de ObjetosEnums
  • Um enum define um tipo para um grupo relacionado de constantes simbólicas
  • As escolhas devem ser conhecidas em tempo de compilação
  • Fortemente tipado:
    • Nenhuma conversão implícita de/para int
    • Pode ser explicitamente convertido
    • Operadores: +, -, ++, --, &, |, ^, ~, …
  • Pode especificar um tipo subjacente
    • byte, sbyte, short, ushort, int, uint, long, ulong
tipos de objetos enums1
Tipos de ObjetosEnums

enum Color: byte {

Red = 1,

Green = 2,

Blue = 4,

Black = 0,

White = Red | Green | Blue

}

Color c = Color.Black;

Console.WriteLine(c); // 0

Console.WriteLine(c.Format()); // Black

tipos de objetos enums2
Tipos de ObjetosEnums
  • Todos enums derivam de System.Enum
    • Fornece métodos para:
      • Determinar o tipo subjacente
      • O testar se um valor é suportado
      • Inicializar a partir de uma constante string
      • Recuperar todos os valores em enum
tipos de objetos arrays
Tipos de ObjetosArrays
  • Os arrays (vetores) permitem que um grupo de elementos de um tipo específico sejam armazenados em um bloco contíguo de memória
  • Os vetores são tipos de referência
  • Derivados de System.Array
  • Baseados em Zero
  • Podem ser multidimensionais
    • Os vetores sabem seu comprimento(s) n e grau
  • Permite verificação de limites de dimensões
tipos de objetos arrays1
Tipos de ObjetosArrays
  • Declaração
  • Alocação
  • Inicialização
  • Atribuição e acesso
  • Enumeração

int[] primes;

int[] primes = new int[9];

int[] prime = new int[] {1,2,3,5,7,11,13,17,19}; int[] prime = {1,2,3,5,7,11,13,17,19};

prime2[i] = prime[i];

foreach (int i in prime) Console.WriteLine(i);

tipos de objetos arrays2
Tipos de ObjetosArrays
  • Arrays Multidimensionais
    • Retangular
      • int[,] matR = new int[2,3];
      • Pode ser inicializado declarativamente
      • int[,] matR = new int[2,3] { {1,2,3}, {4,5,6} };
    • Dentado
      • Um array de arrays
      • int[][] matJ = new int[2][];
      • Deve ser inicializado proceduralmente
tipos de objetos interfaces
Tipos de ObjetosInterfaces
  • Uma interface define um contrato
    • Inclui métodos, propriedades, indexadores, eventos
    • Qualquer classe ou estrutura implementando uma interface deve suportar todas as cláusulas do contrato
  • Interfaces fornecem polimorfismo
    • Muitas classes e estruturas podem implementar uma particular interface
  • Não contém nenhuma implementação
    • Devem ser implementadas por uma classe ou estrutura
tipos de objetos classes
Tipos de ObjetosClasses
  • Um tipo de referência definida pelo usuário
    • Similar às classes do C++ e Java
  • Aceitam herança simples de uma única super classe
  • Aceitam herança múltipla de várias interfaces
tipos de objetos classes1
Tipos de ObjetosClasses
  • Membros
    • Constantes, dados, métodos, operadores, construtores e destrutores
    • Propriedades, indexadores e eventos
    • Membros estáticos e instanciados
  • Acesso aos membros
    • public, protected, private, internal, protectedinternal
      • O padrão é private
  • Instanciadas através do operador new
tipos de objetos estruturas structs
Tipos de ObjetosEstruturas (Structs)
  • Similar às classes, mas:
    • Tipo de valor definido pelo usuário
    • Herança sempre a partir de um ValueType
  • Ideal para objetos “leves” ou “primitivos”
    • int, float, double, etc., são todos structs
    • Tipos primitivos definidos pelo usuário
      • Complex, point, rectangle, color, rational
  • Herança múltipla de interfaces
  • Possuem os mesmos membros de uma classe
  • Acesso aos membros
    • public, internal, private
  • Instanciadas através do operador new
tipos de objetos classes e structs
Tipos de ObjetosClasses e Structs

struct SPoint { int x, y; ... }

class CPoint { int x, y; ... }

SPoint sp = new SPoint(10, 20);

CPoint cp = new CPoint(10, 20);

10

sp

20

cp

CPoint

10

20

tipos de objetos delegates
Tipos de ObjetosDelegates
  • Um delegate é um tipo de referência que define uma assinatura a um método
  • Quando instanciada, uma delegate contém um ou mais métodos
    • Essencialmente um apontador de funções orientado para objetos.
  • Base fundamental para tratamento de eventos
estrutura de programa o introdu o
Estrutura de ProgramaçãoIntrodução
  • Organizando Tipos
  • Namespaces
  • References
  • O Método Main
  • Sintaxe
estrutura de programa o organizando tipos

Assembly

Module

File

Type

Estrutura de ProgramaçãoOrganizando Tipos
  • Organização física:
    • Os tipos de objetos (type) são definidos em arquivos (file).
    • Os arquivos são compilados em módulos (module).
    • Os módulos são agrupados em montagens (assembly).
estrutura de programa o organizando tipos1
Estrutura de ProgramaçãoOrganizando Tipos
  • Os tipos são definidos em arquivos:
    • Um arquivo pode conter múltiplos tipos
    • Cada tipo é definido em um único arquivo
  • Os arquivos são compilados em módulos:
    • Um módulo é uma DLL ou um EXE
    • Um módulo pode conter múltiplos arquivos
  • Os módulos são agrupados em assemblys:
    • Um assembly pode conter múltiplos módulos
    • Os assemblys e os módulos são sempre 1:1
estrutura de programa o organizando tipos2
Estrutura de Programação Organizando Tipos
  • Os tipos são definidos em UM lugar:
    • “One-stop programming”
    • Nenhum arquivo de cabeçalho (header) ou arquivo de código-fonte para sincronizar.
    • O código é escrito “in-line”
    • A declaração e a definição são uma mesma e única instrução.
    • Um tipo deve estar completamente definido em um arquivo.
      • Não se pode por métodos individuais em arquivos diferentes
  • Nenhuma declaração exige dependência
    • Nenhuma referência futura é exigida
estrutura de programa o namespaces
Estrutura de ProgramaçãoNamespaces
  • Namespaces fornecem um modo para identificar um tipo de forma exclusiva.
  • Fornece organização lógica de tipos:
    • Namespaces podem estar em vários assemblies
    • Namespaces podem ser aninhados
  • Não existe nenhuma relação entre namespaces e estruturas de arquivo (diferentemente do que ocorre em Java).
  • Um nome de tipo completamente qualificado inclui todos os namespaces.
estrutura de programa o namespaces1
Estrutura de ProgramaçãoNamespaces

namespace N1 {     // N1

class C1 {   // N1.C1

class C2 {   // N1.C1.C2

}    

}    

namespace N2 {    // N1.N2

class C2 { // N1.N2.C2    

}    

}

namespace N3.N4 {    // N1.N3.N4

class C2 { // N1.N3.N4.C2    

}    

}

}

estrutura de programa o namespaces2
Estrutura de ProgramaçãoNamespaces
  • A diretiva using permite que você utilize tipos de objetos diferentes sem precisar digitar toda a qualificação do nome de um objeto.
  • Porém, sempre que quiser, você pode usar um nome completamente qualificado.

using N1;

C1 a; // O N1. está implícito

N1.C1 b; // Nome qualificado

C2 c; // Erro! C2 está indefinido

N1.N2.C2 d; // Um objeto da classe C2

C1.C2 e; // Um outro

estrutura de programa o namespaces3
Estrutura de ProgramaçãoNamespaces
  • A diretiva using também permite que você crie nomes alternativos (aliases).

using MeuC1 = N1.N2.C1;

using MeuN2 = N1.N2;

MeuC1 a; // Refere-se a N1.N2.C1

MeuN2.C1 b; // Refere-se a N1.N2.C1

estrutura de programa o namespaces4
Estrutura de ProgramaçãoNamespaces
  • Melhor prática: ponha todos os seus tipos em um único namespace.
  • Tenha um namespace específico para sua empresa, projeto, produto, etc.
  • Estude como as classes do .NET Framework são organizadas e se inspire nelas para criar a organização de classes da sua empresa, projeto, produto, etc.
estrutura de programa o refer ncias
Estrutura de ProgramaçãoReferências
  • No Visual Studio você especifica referências para um projeto.
  • Cada referência identifica um específico assembly.
  • Passada como referência (/r ou /reference) para o compilador do C#.

csc HelloWorld.cs /reference:System.WinForms.dll

estrutura de programa o namespaces vs refer ncias
Estrutura de ProgramaçãoNamespaces vs. Referências
  • Namespaces fornecem a capacidade de utilizar abreviações de nomenclaturas a nível de linguagem.
    • Para que você não tenha que digitar um nome longo, completamente qualificado, repetidas vezes.
  • As referências especificam que assembly deve ser utilizado.
estrutura de programa o o m todo main
Estrutura de ProgramaçãoO Método Main
  • A execução começa com o método estático Main().
  • Normalmente, pode haver só um método com uma das seguintes assinaturas em um assembly:
    • static void Main()
    • static int Main()
    • static void Main(string[] args)
    • static int Main(string[] args)
  • Porém, você pode ter múltiplas classes, cada com uma com um método Main, se você usar o comando /main para especificar a classe a usar.
estrutura de programa o sintaxe
Estrutura de ProgramaçãoSintaxe
  • Identificadores:
    • Nomes para tipos, métodos, dados, etc.
    • Deve ser uma palavra inteira – sem nenhum espaço em branco.
    • Caracteres Unicode
    • Começa com uma letra ou com o sublinhado (_Teste)
    • Sensível a letras maiúsculas e minúsculas (case sensitive).
    • Não devem ser utilizadas palavras-chave reservadas
      • A menos que prefixadas com @
comandos introdu o
ComandosIntrodução
  • Alta fidelidade ao C++
  • if, while, do requerem uma condição bool
  • goto não pode saltar para blocos
  • Comando switch
    • Não permite falha
  • Comando foreach
  • Comandos checked e unchecked
  • Conjuntos decomandos devemfazer o trabalho.

void Foo() {

i == 1; // erro

}

comandos introdu o1
ComandosIntrodução
  • Seqüências de comandos
  • Blocos de comandos
  • Comandos rotulados
  • Declarações:
    • Constantes
    • Variáveis
  • Expressões de comandos:
    • checked, unchecked
    • lock
    • using
  • Comandos para condições:
    • if
    • switch
  • Comandos para repetições:
    • while
    • do
    • for
    • foreach
  • Comandos para desvios:
    • break
    • continue
    • goto
    • return
    • throw
  • Tratamento de exceções:
    • try
    • throw
comandos sintaxe
ComandosSintaxe
  • Linhas de comandos são finalizadas com um ponto-e-vírgula (;)
  • Da mesma forma que C, C++ e Java
  • Blocos de comandos { ... } não precisam de um ponto-e-vírgula.
comandos sintaxe1
ComandosSintaxe
  • Comentários:
  • // Comenta uma só linha, estilo C++
  • /* Comenta múltiplas linhas, estilo C*/
comandos seq ncias blocos de comandos
ComandosSeqüências & Blocos de Comandos
  • Seqüência de comandos: um ou mais comandos em seqüência.
  • Bloco de comandos: uma seqüência de comandos delimitados por chaves { ... }

static void Main() {

F();

G();

{ // Início do bloco

H();

; // Comando vazio

I();

} // Fim do bloco

}

comandos vari veis e constantes
ComandosVariáveis e Constantes

static void Main() {

const float pi = 3.14;

const int r = 123;

Console.WriteLine(pi * r * r);

int a;

int b = 2, c = 3;

a = 1;

Console.WriteLine(a + b + c);

}

comandos vari veis e constantes1
ComandosVariáveis e Constantes
  • O escopo de uma variável ou constante é válidodo ponto da sua declaração até o fim do bloco onde foi declarada.
  • Dentro deste escopo, será gerado um erro se for declarada outra variável ou constante com o mesmo nome.

{

int x;

{

int x; // Erro: não é possível

// redefinir a variável x

}

}

comandos vari veis
ComandosVariáveis
  • Um valor deve ser atribuído às variáveis antes delas poderem ser usadas.
    • Explicitamente ou automaticamente
    • Camada definição de atribuição (definite assignment)
  • Atribuição automática ocorre apenas para dados estáticos, classes, instâncias de classes e elementos de arrays.

void Foo() {

string s;

Console.WriteLine(s); // Erro

}

comandos comandos rotulados goto
ComandosComandos Rotulados & goto
  • O comando goto pode ser usado para transferir o controle para dentro ou para fora de um bloco, mas não em um bloco aninhado.

static void Acha(int valor, int[,] valores,

out int linha, out int coluna) {

int i, j;

for (i = 0; i < valores.GetLength(0); i++)

for (j = 0; j < valores.GetLength(1); j++)

if (valores[i, j] == valor) goto Achei;

throw new InvalidOperationException(“Não achado");

Achei:

linha = i; coluna = j;

}

comandos express es em comandos
ComandosExpressões em Comandos
  • Comandos devem executar trabalhos
    • Atribuição de valores, chamadas de métodos, ++, --, new etc.

static void Main() {

int a, b = 2, c = 3;

a = b + c;

a++;

MinhaClass.Foo(a,b,c);

Console.WriteLine(a + b + c);

a == 2; // ERRO!

}

comandos comando if
ComandosComando if
  • Exige uma expressão lógica (bool):

int Teste(int a, int b) {

if (a > b)

return 1;

else if (a < b)

return -1;

else

return 0;

}

comandos comando switch
ComandosComando switch
  • Pode ramificar sobre qualquer tipo predefinido (inclusive string) ou enum
    • Os tipos definidos pelo usuário podem fornecer conversão implícita para estes tipos.
  • Deve definir explicitamente como finalizar um caso ou ramificação:
    • Com break, goto case, goto label, return, throw ou continue
    • Elimina falhas e bugs
    • Não necessita if nenhum código é provido depois do rótulo.
comandos comando switch1
ComandosComando switch

int Teste(string rotulo) {

int resultado;

switch(rotulo) {

case null:

goto case “ausente”;

case “mais rápido”:

case “vencedor”:

resultado = 1; break;

case “ausente”:

resultado = 2; break;

default:

resultado = 0;

}

return resultado;

}

comandos comando while
ComandosComando while
  • Exige uma expressão lógica (boleana)

int i = 0;

while (i < 5) {

...

i++;

}

int i = 0;

do {

...

i++;

}

while (i < 5);

while (true) {

...

}

comandos comando for
ComandosComando for
  • Exatamente como em C, C++ e Java

for (int i=0; i < 5; i++) {

...

}

for (;;) {

...

}

comandos comando foreach
Comandos Comando foreach
  • Fornece simplicidade para manipulação de vetores e matrizes (arrays).

public static void Main(string[] args) {

foreach (string s in args)

Console.WriteLine(s);

}

comandos comando foreach1
Comandos Comando foreach
  • Manipulação de coleções definidas pelo usuário.
  • Criadas através da implementação de IEnumerable

foreach (Cliente c in Clientes.OrderBy("nome")) {

if (c.Pedidos.Count != 0) {

...

}

}

comandos comandos de desvio
ComandosComandos de Desvio
  • break
    • Saída da repetição (loop) mais interna
  • continue
    • Finaliza a repetição (loop) mais interna
  • goto <label>
    • Transfere a execução para o comando rotulado
  • return [<expression>]
    • Saída de um método
  • throw
    • Manipulação de exceção
comandos tratamento de exce es
ComandosTratamento de Exceções
  • As exceções constituem o mecanismo do C# para o tratamento de condições de erro inesperadas.
  • Mais aperfeiçoadas por retornar valores de estado:
    • Não podem ser ignoradas
    • Não precisam ser tratadas no ponto em que ocorrem
    • Podem ser usadas até onde valores estado não são retornados (p.ex. atribuindo uma propriedade)
    • Exceções padrão são fornecidas pelo C#
comandos tratamento de exce es1
ComandosTratamento de Exceções
  • Comando try...catch...finally
  • O bloco try contém código que pode causar uma exceção.
  • O bloco catch trata a exceção:
    • Pode haver múltiplos blocos catch para tratar diferentes tipos de exceção.
  • O bloco finally contém código que sempre será executado:
    • Não é permitido usar comandos de desvio (p.ex. goto) para sair de um bloco finally.
comandos tratamento de exce es2
ComandosTratamento de Exceções
  • O comando throw gera uma exceção
  • Uma exceção é representada como uma instância de System.Exception ou classe derivada:
    • Contém informações sobre a exceção
    • Propriedades:
      • Message
      • StackTrace
      • InnerException
  • Você pode gerar novamente (rethrow) uma exceção, ou tratar (catch) uma exceção e gerar (throw) uma outra.
comandos tratamento de exce es3
ComandosTratamento de Exceções

try {

Console.WriteLine(“Tente executar");

throw new Exception(“Gere um erro!”);

}

catch (ArgumentNullException e) {

Console.WriteLine(“Peguei um erro!");

}

catch {

Console.WriteLine(“Te peguei novamente!");

}

finally {

Console.WriteLine(“Finalmente saí, ufa!");

}

comandos sincroniza o
ComandosSincronização
  • Aplicativos com múltiplas camadas precisam se proteger contra acesso simultâneo a dados:
    • Devem prevenir corrupção de dados
  • O comando lock (bloqueio) usa uma instância para fornecer exclusão mútua:
    • Só um comando lock pode ter acesso à uma mesma instância
    • Na verdade ele usa a classe System.Threading.Monitor do .NET Framework para fornecer exclusão mútua.
comandos sincroniza o1
ComandosSincronização

public class AtualizaConta {

decimal saldo;

public void Deposito(decimal valor) {

lock (this) {

saldo += valor;

}

}

public void Saque(decimal valor) {

lock (this) {

saldo -= valor;

}

}

}

comandos using
Comandosusing
  • Não se trata da diretiva using, mas sim do comando.
  • O C# gerencia automaticamente o uso da memória implementando um “coletor de lixo” (garbage collection)
    • Isso elimina a maioria de problemas de administração de memória.
  • Porém, resulta em finalização não determinística:
    • Não há garantia quando e se um “objeto destruidor ou coletor de lixo” é chamado.
comandos using1
Comandosusing
  • Os objetos que precisam ser limpos depois de usados devem implementar a interface System.IDisposable
    • Um método: Dispose()
  • O comando using permite que você crie uma instância, use-a, e então se assegure que o método Dispose é chamado quando você não precisar mais dela.
    • Dispose sempre é chamado, como se ele estivesse em um bloco finally.
  • Não confunda com a diretiva using.
comandos using2
Comandosusing

public class MeuRecurso : IDisposable {

public void MeuRecurso() {

// Aquisição do recurso

}

public void Dispose() {

// Descarte do recurso

}

public void FaçaAlgo() {

...

}

}

using (MeuRecurso r = new MeuRecurso()) {

r.FaçaAlgo();

} // r.Dispose() é chamado

comandos checked e unchecked
Comandoschecked e unchecked
  • Os comandos checked e unchecked permitem que você controle a verificação de overflow em operações aritméticas e conversões.
    • checked força a verificação de overflow
    • unchecked força a não verificação de overflow
  • Você pode usar ambos como bloco de instruções oucomo uma expressão.
  • O padrão é unchecked
  • Use a opção /checked do compilador para fazer checked o padrão.
comandos entrada e sa da b sicas
ComandosEntrada e Saída Básicas
  • Aplicativos de console (janela DOS):
    • System.Console.WriteLine();
    • System.Console.ReadLine();
  • Aplicativos Windows:
    • System.Windows.Forms.MessageBox.Show();

string v1 = “Algum dado”;

MeuObjeto v2 = new AlgumObjeto();

Console.WriteLine(“O primeiro é {0}, o segundo é {1}”, v1, v2);

operadores introdu o
OperadoresIntrodução
  • O C# fornece um conjunto fixo de operadores, cujo significado é definido para os tipos predefinidos.
  • Alguns operadores podem ser sobrecarregados (por exemplo +)
  • A tabela a seguir resume os operadores do C# por categoria:
    • As categorias estão em ordem de precedência decrescente
    • Os operadores em cada categoria têm a mesma precedência
operadores associatividade
OperadoresAssociatividade
  • Operadores de atribuição e ternários condicionais são associativos à direita:
    • As operações são executadas da direita para a esquerda
    • x = y = z é avaliada como x = (y = z)
  • Todos outros operadores binários são associativos à esquerda:
    • As operações são executadas da esquerda para a direita
    • x + y + z é avaliada como (x + y) + z
  • Use parênteses para controlar a ordem
usando o visual studio net
Usando o Visual Studio.NET
  • Tipos de projetos:
    • Aplicativo de Console (janela DOS)
    • Aplicativo Windows
    • Aplicativo Web
    • Web Service
    • Windows Service
    • Biblioteca de Classes
    • ...
usando o visual studio net1
Usando o Visual Studio.NET
  • Janelas de trabalho:
    • Solution Explorer: componentes da solução
    • Class View: classes em uso
    • Properties: propriedades de objetos
    • Output: saídas do compilador
    • Task List: lista de tarefas a executar
    • Object Browser: navegação por objetos
    • Server Explorer: acesso a servidores conectados
    • Toolbox: componentes e ferramentas
usando o visual studio net2
Usando o Visual Studio.NET
  • Construindo: compilando o aplicativo
  • Depurando: debugando erros
    • Pontos de parada (break points)
  • Referências: referenciando componentes
  • Salvando: gravando a aplicação
usando o visual studio net3
Usando o Visual Studio.NET
  • Demonstração: O Visual Studio.NET
refer ncias
Referências
  • http://msdn.microsoft.com
  • http://windows.oreilly.com/news/hejlsberg_0800.html
  • http://www.csharphelp.com/
  • http://www.csharp-station.com/
  • http://www.csharpindex.com/
  • http://msdn.microsoft.com/msdnmag/issues/0900/csharp/csharp.asp
  • http://www.hitmill.com/programming/dotNET/csharp.html
  • http://www.c-sharpcorner.com/
  • http://msdn.microsoft.com/library/default.asp?URL=/library/dotnet/csspec/vclrfcsharpspec_Start.htm
  • Livro:
    • Beginning C# Programado, Karli Watson et all, Makron Books – Pearson Education do Brasil, São Paulo - 2002