Sei sulla pagina 1di 51

Programao em C# com Visual Studio .

NET

Prof. Alessandro Brawerman

IDEs Gratutas


Sharp Develop

http://sourceforge.net/projects/sharpdevelop http://www.microsoft.com/express/vcsharp/Default.a
spx

Visual C# 2008 Express Edition Web Matrix

http://www.asp.net/downloads/archived/web-matrix/ http://www.microsoft.com/express/vwd/Default.aspx
Programao em C# 2

Visual Web Developer 2008 EE

Anatomia de um Projeto C#


Todo projeto C# envolve um arquivo de extenso .cs. Contm a declarao e inicializao do aplicativo. O C# trabalha com o conceito de blocos de comandos e sees de declaraes. Os blocos comeam com { e terminam com }.

Programao em C#

Anatomia de um Projeto C#


Namespaces

Usados para declarar um escopo de forma a

perimitir melhor organizao do cdigo. Evitam a poluio do escopo global que causa coliso de nomes e cdigo quando projeto feito por equipes diferentes. Funcionam como uma espcie de alias para o endereo de um determinado cdigo.

Programao em C#

Namespaces

Por exemplo:
class hello { public static void Main() { System.Console.WriteLine(Hello World); string str = System.Console.ReadLine(); } }

using System; class hello { public static void Main() { Console.WriteLine(Hello World); string str = Console.ReadLine(); } }

Programao em C#

Namespaces


Alm de melhorar a aparncia do cdigo e digitar menos, imagine que outro desenvolvedor de sua equipe criou uma classe chamada hello. Quando um terceiro chamar a classe hello, qual das duas ser chamada? O cdigo final, para resolver este problema, deve nomear um namespace novo.

Programao em C#

Namespaces
using System; namespace Livro { class hello { public static void Main() { Console.WriteLine(Hello World); string str = Console.ReadLine(); } } }

Para invocar um mtodo em outro namespace: using Livro ou Livro.hello.Main();


Programao em C# 7

Namespaces
    

Pode-se declarar um namespace dentro de outro. Ele uma diviso lgica no fsica. Pode estar quebrado em vrios arquivos fontes. Podemos ter vrios namespaces em uma mesma DLL. Podemos ter uma DLL com um nico namespace.
Programao em C# 8

Namespaces


Podemos ter um namespace quebrado em vrias DLLs. Quando uma aplicao organizada logicamente em um namespace, deve possuir pelos menos uma classe que implemente o mtodo Main(). Assim como as classes possuem membros, namespaces tambm os possuem.

Programao em C#

Namespaces


Podem ser:

Outro namespace Classes Struct Enum Interface Delegate

Programao em C#

10

Class


Toda a lgica do programa deve estar contida em classes. Assim que uma classe definida, pode ser instanciada em qualquer lugar do projeto. Por padro as classes so declaradas como internas, apenas o cdigo atual ter acesso a elas. Se desejarmos que a classe seja acessada por outros projetos e classes deve-se usar a palavra public.

Programao em C#

11

Class
Class App { .... } Internal Class App Public Class App { { .... .... } }

Programao em C#

12

Class


Todo o programa C# deve ter uma classe que defina um mtodo Main(), que deve tambm ser declarado com esttico. Static diz ao runtime que o mtodo pode ser chamada sem a classe ser instanciada. Static void Main(string[] args) { ... } // Recebe argumentos Static int Main() { ... } // Retorna inteiro
13

Programao em C#

Mtodos


Equivalentes as funes ou procedimentos na programao estruturada. A razo para criarmos mtodos a de isolar em um nico lugar um nico algoritmo, de forma a reduzir a complexidade total do programa. Os mtodos esto diretamente ligados.

[modificador de acesso] [tipo de mtodo] <tipo do valor de retorno> <identificador do mtodo> ([lista de parmetros]) { implementao }

Programao em C#

14

Mtodos


Exemplo
Public void metodoTeste() { .... } Private int Soma(int a, int b) { return a + b; }
Programao em C# 15

Variveis


Corresponde a uma posio de memria, cujo contedo pode ser alterado durando a execuo do programa. Nomes de variveis so identificadores, no podem comear com nmero, s letras ou _. Declarao

<tipo varivel> <nome varivel> [ = valor inicial];

Programao em C#

16

Tipos


Object

System.Object Classe bsica para todos os tipos System.String Cadeia de caracteres System.Sbyte Byte de 8 bits com sinal
Programao em C# 17

String sByte

Tipos


Byte

System.Byte Byte de 8 bits sem sinal System.Int16 Valor inteiro de 16 bits com sinal System.UInt16 Valor de 16 bits sem sinal
Programao em C# 18

Short

Ushort

Tipos


Int

System.Int32 Valor inteiro de 32 bits com sinal System.UInt32 Valor inteiro de 32 bits sem sinal System.Int64 Valor inteiro de 64 bits com sinal
Programao em C# 19

UInt

Long

Tipos


ULong Char

System.UInt64 Valor inteiro de 64 bits sem sinal System.Char Caracter unicode de 16 bits System.Single Nmero de ponto flutuante de 32 bits
Programao em C# 20

Float

Tipos


Double Bool

System.Double Nmero de ponto flutuante de 64 bits System.Boolean Valor booleano (true / false) System.Decimal Valores monetrios com 128 bits para 28 ou 29
dgitos
Programao em C# 21

Decimal

Trabalhando com Valores




O programa a seguir tem como objetivo a fixao de tipos do C#. Neste programa usaremos um form com uma listBox, um textBox e 2 labels. Precisaremos de mtodos e do comando switch/case

Programao em C#

22

Trabalhando com Valores




O comando Switch / Case:

um comando condicional

switch(Varivel ou Expresso) { case Valor:


... break; ...... }

Programao em C#

23

Trabalhando com Valores




O comando Switch / Case:


switch(listTipos.Text) { case "int":
showValorInt(); break;

.... }

Programao em C#

24

Trabalhando com Valores


 

Precisaremos ainda do mtodo ToString. Lembre que TextBox s aceita String, ento para transformar um nmero, por exemplo inteiro para string, podemos usar o .ToString aps a varivel. long val = 42L; tbValor.Text = val.ToString();

Programao em C#

25

Trabalhando com Valores




Interface do exerccio
Ttulo do form Labels

TextBox

ListBox Valores da ListBox Atravs da prop. Items


Programao em C# 26

Tipos de Data e Hora


 

DateTime. As datas podem ser armazenados em formatos diferentes:

23/01/2008 quarta-feira, 23 de janeiro de 2008 8:30:00PM

So armazenados em inteiros longos com 8 bytes que representam uma data de 1/1/1 at 31/12/9999. As horas vo de 0:00:00 at 23:59:59.
Programao em C# 29

Tipos de Data e Hora




Exemplo:

DateTime hoje = new DateTime(2008,01,23);

Quando vc chamar no cdigo o construtor do DateTime vai verificar que ele possui 7 overloads.

Programao em C#

30

Programao em C#

31

Regionalizando o Formato da Data




 

Regionalizar o formato da data fundamental para a boa apresentao. Precisaremos do namespace Globalization Este namespace contm as classes que tratam das culturas regionais, inlcuindo linguagem, datas, monetrio e outros. O prximo exerccio tem como objetivo tratar exatamente deste problema.
Programao em C# 32

Regionalizando o Formato da Data

GroupBox

DateTimePicker Labels

Programao em C#

33

Regionalizando o Formato da Data




Crie o evento Load do formulrio clicando duas vezes no formulrio.

Programao em C#

34

Regionalizando o Formato da Data




O objetivo apresentar a data selecionada no calendrio em 3 formatos regionalizados para o portugus.

Programao em C#

35

Regionalizando o Formato da Data




Para terminar falta avisarmos ao C# que queremos padro Brasil. Para tal precisaremos :

using System.Globalization; using System.Threading;

No construtor, aps o InitializeComponent():

CultureInfo BR = new CultureInfo(pt-BR); Thread.CurrentThread.CurrentCulture = BR;


Programao em C#

36

Exerccio


Criar o evento da mudana de data no calendrio e atualizar os labels. Mudar tambm o UTC para hora do Brasil.

Programao em C#

37

Operadores Aritmticos
 

+, -, *, /, % O tipo de resultado de uma operao depende do tipo de operandos usados.

5.0 / 2.0 = 2.5 5/2=2 34 + 1 = 341 9%2=1

Programao em C#

38

Operadores Aritmticos


O prximo exerccio tem por objetivo a construo de uma calculadora de layout diferente. O usurio entra com 2 valores, escolhe a opreo, a calculadora monta a expresso algbrica e mostra o resultado.

Programao em C#

39

Operadores Aritmticos
Label TextBox Label TextBox GroupBox Label RadioButtons

TextBox Enabled = false

Boto

Programao em C#

40

Operadores Aritmticos
 

Para o cdigo precisaremos de um novo mtodo, Convert. Podemos converter valores entre tipos diferentes atravs de um cast ou usando o mtodo Convert.

int a = (int)107.34; int a = Convert.ToInt32(107.34);

O mtodo Convert muito til pois converte de qualquer tipo para qualquer outro tipo.
Programao em C# 41

Operadores Aritmticos


RadioButton Adio

Programao em C#

42

Operadores Aritmticos


Os outros radiobuttons so similares ao anterior. Limpar e sair seguem abaixo.

Programao em C#

43

Operadores Aritmticos


Incrementos ou decrementos em 1 podem ser feitos da seguinte maneira:

count++, count--, ++count, --count

X = 42; Console.WriteLine(x++); Console.WriteLine(++x);




X = X + Y, pode ser escrito por X += Y.

Programao em C#

44

Tipos Referncia versus Valor




Os tipos valor armazenam a si prprios e a seu contedo no mesmo local de memria, chamado de pilha. Os tipos de referncia contm uma referncia para outro lugar da memria, o heap, em que o contedo armazenado. No C# no h necessidade de se preocupar muito com isto, mas bom saber como as coisas funcionam.
Programao em C# 45

Tipos Referncia versus Valor




Todos os tipos so derivados de Object, que um tipo por referncia. Mesmo os int, por exemplo, derivam do Object. Foram transformados em valor para otimizao. Um tipo inteiro pagaria um preo muito alto de performance se tivesse um endereo na pilha contendo uma referncia ao heap.

Programao em C#

46

Tipos Referncia versus Valor


 

Tipos por referncia no so criados na declaarao deles (exceto o tipo string). Quando declarados so apenas reservados na pilha, e so criados e armazenados no heap aps a declarao new, ou seja, aps serem inicializados. Os tipos por valor no precisam ser inicializados, eles tm seu espao j reservado em memria quando criados.
Programao em C# 47

Tipos Referncia versus Valor


Stack void metodo(int param) { Circle c; c = new Circle(param) ... } int param 42 Circle c @ Heap

42

Programao em C#

48

Tipos Referncia versus Valor


Stack Heap

Circle c = new Circle(param); .... object o = c;

Circle c @ object o @

42

Ao modificar c ou o modifica-se o valor do heap, como ambos apontam para o mesmo endereo, ambos vero a modificao.

Programao em C#

49

Tipos Referncia versus Valor


Stack int i 42 object o @ Heap

int i =42; object o = i;

42

Se modificar o valor de i, no estar modificando o valor no heap, ele apenas uma cpia. Copiar de item da stack para o heap chamado de Boxing.
Programao em C# 50

Tipos Referncia versus Valor


Stack object o @ int i 42 Processo inverso ao boxing, chamado unboxing. A modificao de qualquer um deles, aps a cpia do valor, no altera o outro. Cuidado com o cast, ele deve ser exatamente do mesmo tipo do valor do heap, caso contrrio lanada uma InvalidCastException.
Programao em C# 51

Heap

object o = 42; int i = (int)o;

42

Potrebbero piacerti anche