a linguagem c#. sobre o que iremos falar... as características mais importantes da linguagem c# as...

Post on 17-Apr-2015

138 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

TRANSCRIPT

A linguagem C#A linguagem C#

Sobre o que iremos falar...Sobre o que iremos falar...

As características mais importantes da As características mais importantes da linguagem C#linguagem C#

Alguma comparação c/ Java e C++Alguma comparação c/ Java e C++

Reflexão crítica: aspectos positivos e Reflexão crítica: aspectos positivos e negativosnegativos

Porquê C# ?Porquê C# ?

.Net é uma plataforma interessante.Net é uma plataforma interessante

Java e C# são semelhantesJava e C# são semelhantes Ainda mais quando sobre .NetAinda mais quando sobre .Net

C# é a linguagem de eleição no .NetC# é a linguagem de eleição no .Net

““Hello World”Hello World”

using System;using System;

public class HelloWorld public class HelloWorld {{ public static void Main(string[] args) public static void Main(string[] args) {{ Console.WriteLine(“Hello World!”);Console.WriteLine(“Hello World!”); }}}}

Semelhante a Java e C++Semelhante a Java e C++public class Pessoapublic class Pessoa{{ private string private string Nome;Nome; private int private int Idade;Idade;

public Pessoa(string nome, int idade) {public Pessoa(string nome, int idade) { this.Nome = nome;this.Nome = nome; this.Idade = idade;this.Idade = idade; }}

public void MostraInfo() {public void MostraInfo() { Console.WriteLine(“{0}, tem {1} anos”, Console.WriteLine(“{0}, tem {1} anos”, Nome, Idade);Nome, Idade); }}}}

Pessoa Cliente = new Pessoa(“Carlos”, 25);

Cliente.MostraInfo();

C# - CaracterísticasC# - Características

Linguagem OO:Linguagem OO: Muito semelhante ao C++ / JavaMuito semelhante ao C++ / Java É fácil começar a programar em C#É fácil começar a programar em C#

Sistema unificado de tiposSistema unificado de tipos Tudo pode ser visto como um objectoTudo pode ser visto como um objecto

Suporte directo à Programação Baseada Suporte directo à Programação Baseada em Componentesem Componentes Propriedades, Eventos e AtributosPropriedades, Eventos e Atributos AssembliesAssemblies

Tudo é um objecto!Tudo é um objecto!

int val = 10;int val = 10;

object obj = val;object obj = val;

int k = (int) obj;int k = (int) obj; // k fica c/ valor 10// k fica c/ valor 10

System.Int32System.Int32 }} BoxingBoxing

1010

1010

val

obj

}} UnboxingUnboxing1010k

Tudo é um objecto (2)Tudo é um objecto (2)

JAVAJAVA

Hashtable ht Hashtable ht

= new Hashtable();= new Hashtable();

ht.put(new Integer(1), “Xpto”);ht.put(new Integer(1), “Xpto”);

ht.put(new Integer(2), “Xpti”);ht.put(new Integer(2), “Xpti”);

C#C#

Hashtable ht Hashtable ht

= new Hashtable();= new Hashtable();

ht.Add(1, “Xpto”);ht.Add(1, “Xpto”);

ht.Add(2, “Xpti”);ht.Add(2, “Xpti”);

O fim das classes de O fim das classes de wrappingwrapping!!

Tudo é um objecto (3)Tudo é um objecto (3)

Tudo deriva de Tudo deriva de System.ObjectSystem.Object Métodos: Métodos: EqualsEquals GetTypeGetType ToStringToString FinalizeFinalize MemberwiseCloneMemberwiseClone GetHashCodeGetHashCode

C# baseC# base Controlo de execuçãoControlo de execução

if, for, do, while, switch, if, for, do, while, switch, foreachforeach...... switch sem fall-through:switch sem fall-through:

foreach:foreach: int[] tabela = {1, 2, 3};int[] tabela = {1, 2, 3};

foreach (int i in tabela)foreach (int i in tabela)

Console.WriteLine(“{0}”, i);Console.WriteLine(“{0}”, i);

switch a {switch a {

case 2:case 2:

x = 4;x = 4;

goto case 3 goto case 3

// fall-through explícito// fall-through explícito

case 3:case 3:

......

Sistema de TiposSistema de Tipos

ObjectObject

StringString

ArrayArray

ValueTypeValueType

EnumEnum

StructStruct

intint

shortshort

bytebyte

charchar

floatfloat

decimaldecimal

longlong

uintuint

ulongulong

sbytesbyte

ushortushort

boolbool

doubledouble

ClassClass

string Nome;

int[] tabela;

class Pessoa { ... }

decimal conta;

enum Estado { Ligado, Desligado}

struct Ponto { int x; int y; }

Passagem de parâmetrosPassagem de parâmetros

refref – – passagem de tipos-valor por referênciapassagem de tipos-valor por referência{...{...

char c=‘c’;char c=‘c’;

g(ref c);g(ref c);

}}

outout - - passagem de tipos-valor não inicializados por passagem de tipos-valor não inicializados por referência:referência:{...{...

int x;int x;

f(out x);f(out x);

}}

void f(out int x) {void f(out int x) {

x=2; }x=2; }

void g(ref char pc) {void g(ref char pc) {

pc =‘x’; }pc =‘x’; }

Passagem de parâmetrosPassagem de parâmetros

paramsparams – – passagem de nº variável de parâmetrospassagem de nº variável de parâmetros

public static void Main() public static void Main()

{{ UseParams(1, 'a', "test"); UseParams(1, 'a', "test");

int[] myarray = new int[3] {10,11,12};int[] myarray = new int[3] {10,11,12}; UseParams(myarray);UseParams(myarray); }}

public static void UseParams(params public static void UseParams(params objectobject[] list) [] list) {{ for ( int i = 0 ; i < list.Length ; i++ )for ( int i = 0 ; i < list.Length ; i++ ) Console.WriteLine(list[i]);Console.WriteLine(list[i]); Console.WriteLine();Console.WriteLine(); }}

Herança Herança public class Pessoapublic class Pessoa{{ private string private string Nome;Nome; private int private int Idade;Idade;

public Pessoa(string nome, int idade) {public Pessoa(string nome, int idade) { this.Nome = nome;this.Nome = nome; this.Idade = idade;this.Idade = idade; }}

public void MostraInfo() {public void MostraInfo() { Console.WriteLine(“{0}, tem {1} anos”, Console.WriteLine(“{0}, tem {1} anos”, Nome, Idade);Nome, Idade); }}}}

public class Pessoapublic class Pessoa{{ private string private string Nome;Nome; private int private int Idade;Idade;

public Pessoa(string nome, int idade) {public Pessoa(string nome, int idade) { this.Nome = nome;this.Nome = nome; this.Idade = idade;this.Idade = idade; }}

public public virtualvirtual void MostraInfo() { void MostraInfo() { Console.WriteLine(“{0}, tem {1} anos”, Console.WriteLine(“{0}, tem {1} anos”, Nome, Idade);Nome, Idade); }}}}

Por omissão, os métodos não são virtuais!Por omissão, os métodos não são virtuais!

Por omissão, os métodos não são virtuais!Por omissão, os métodos não são virtuais!

Herança Herança public class Empregado : Pessoapublic class Empregado : Pessoa{{ private string Empresa;private string Empresa;

public Empregado(string nome, int idade, intpublic Empregado(string nome, int idade, int empresa) empresa)

: base(nome, idade): base(nome, idade) {{ this.Empresa = empresa;this.Empresa = empresa; }}

public public overrideoverride void MostraInfo() { void MostraInfo() { base.MostraInfo();base.MostraInfo(); Console.WriteLine(“Empresa: {0}”, Empresa);Console.WriteLine(“Empresa: {0}”, Empresa); }}}}

Binding estático vs. dinâmicoBinding estático vs. dinâmicopublic class Base {public class Base { void Xpto() { Console.WriteLine(“Base.Xpto()”); }void Xpto() { Console.WriteLine(“Base.Xpto()”); } virtual void Xpti() { Console.WriteLine(“Base.Xpti()”); }virtual void Xpti() { Console.WriteLine(“Base.Xpti()”); }}}

public class Derivada : Basepublic class Derivada : Base{{ new void Xpto() { Console.WriteLine(“Deriv.Xpto()”); }new void Xpto() { Console.WriteLine(“Deriv.Xpto()”); } override void Xpti() { Console.WriteLine(“Deriv.Xpti()”); }override void Xpti() { Console.WriteLine(“Deriv.Xpti()”); }}}

Derivada d = new Derivada();Derivada d = new Derivada();

d.Xpto();d.Xpto(); // Resulta em “Deriv.Xpto()”// Resulta em “Deriv.Xpto()”d.Xpti();d.Xpti(); // Resulta em “Deriv.Xpti()”// Resulta em “Deriv.Xpti()”

Base dref = d;Base dref = d;dref.Xpto();dref.Xpto(); // Resulta em “Base.Xpto()”// Resulta em “Base.Xpto()”dref.Xpti();dref.Xpti(); // resulta em “Deriv.Xpti()”// resulta em “Deriv.Xpti()”

InterfacesInterfacesinterface ILeitorCDinterface ILeitorCD{{ void TocaCD(CD cd);void TocaCD(CD cd);}}

public class Aparelhagem public class Aparelhagem : ILeitorCD : ILeitorCD{{ void TocaCD(CD cd) {void TocaCD(CD cd) { ...... }}}}

public class Computador public class Computador : ILeitorCD : ILeitorCD{{ void TocaCD(CD cd) {void TocaCD(CD cd) { ...... }}}}

Aparelhagem sony = newAparelhagem sony = new Aparelhagem(); Aparelhagem();Computador pc = new Computador pc = new Computador(); Computador();ILeitorCD leitor;ILeitorCD leitor;

leitor = sony;leitor = sony;leitor.tocaCD(GreatestHits);leitor.tocaCD(GreatestHits);

leitor = pc;leitor = pc;leitor.tocaCD(GreatestHits);leitor.tocaCD(GreatestHits);

Redefinição de OperadoresRedefinição de Operadores

Em C# é possível redefinir os operadores Em C# é possível redefinir os operadores existentes.existentes.

Lista A = new Lista();Lista A = new Lista();Lista B = new Lista();Lista B = new Lista();

A.Add(1);A.Add(1);A.Add(2);A.Add(2);

B.Add(3);B.Add(3);B.Add(4);B.Add(4);

Lista C = A + B; Lista C = A + B; // Junta ambas as listas// Junta ambas as listas

Redefinição de Operadores (2)Redefinição de Operadores (2)

public class Listapublic class Lista{{ private object[]private object[] Elementos;Elementos;

......

public static Lista operator+(Lista a, Lista b)public static Lista operator+(Lista a, Lista b) {{ Lista resultado = new Lista();Lista resultado = new Lista();

// Copia os elementos de <a> e <b> para // Copia os elementos de <a> e <b> para // a lista <resultado>// a lista <resultado>

return resultado;return resultado; }}}}

Lista A = new Lista();Lista A = new Lista();Lista B = new Lista();Lista B = new Lista();

......

Lista C = A + B;Lista C = A + B;

UnsafeUnsafe Code Code

O C# suporta elementos avançados, como O C# suporta elementos avançados, como a utilização de ponteirosa utilização de ponteiros

Sempre que são utilizados estes Sempre que são utilizados estes elementos, o código tem de ser colocado elementos, o código tem de ser colocado dentro de um contexto dentro de um contexto unsafeunsafe

int total = 0;int total = 0;

unsafeunsafe{{ int* ptr = &total;int* ptr = &total;

*ptr = 10;*ptr = 10;}}

public unsafe public unsafe void FastCopy(byte* dst, byte* src,void FastCopy(byte* dst, byte* src, int count) int count){{ for (int i=0; i<count; i++)for (int i=0; i<count; i++) *dst++ = *src++;*dst++ = *src++;}}

C# vs. C++C# vs. C++

GC destrói objectos inacessíveisGC destrói objectos inacessíveis Tipos de referência e tipos-valorTipos de referência e tipos-valor Boxing, unboxingBoxing, unboxing Redefinição de métodos tem de ser Redefinição de métodos tem de ser

explícitaexplícita

C# vs. C++ (2)C# vs. C++ (2)

booleanboolean não são inteiros não são inteiros switchswitch sem sem fall-throughfall-through Não se podem usar variáveis sem Não se podem usar variáveis sem

atribuição (atribuição (outout)) Não há métodos globaisNão há métodos globais

C# vs JavaC# vs Java

Só há um Só há um MainMain Várias classes num ficheiroVárias classes num ficheiro namespaces namespaces em vez deem vez de packages packages

C# vs Java (2)C# vs Java (2)

GotoGoto foreachforeach Redefinição de operadoresRedefinição de operadores EnumeraçõesEnumerações Tipos-valor e Tipos-valor e BoxingBoxing Código inseguro (Código inseguro (unsafeunsafe)) refref serve para passar por referência serve para passar por referência

Documentação em XMLDocumentação em XML

/// <summary>/// <summary>/// Este método calcula o ordenado de uma pessoa, /// Este método calcula o ordenado de uma pessoa, /// baseado nos seus dias de trabalho./// baseado nos seus dias de trabalho./// </summary>/// </summary>///////// <param name=“diasTrabalho">/// <param name=“diasTrabalho">/// O número de dias que trabalhou./// O número de dias que trabalhou./// </param>/// </param>///////// <returns> O salário da pessoa. </returns>/// <returns> O salário da pessoa. </returns>

public int CalculaOrdenado(int diasTrabalho)public int CalculaOrdenado(int diasTrabalho){{ ......}}

Exercício 1Exercício 1

Abra o VisualStudio.NetAbra o VisualStudio.Net Construa a aplicação “Hello World” como Construa a aplicação “Hello World” como

Console ApplicationConsole Application Utilize o métodoUtilize o método WriteLine WriteLine da classe da classe ConsoleConsole

Construa uma aplicação semelhante, agora Construa uma aplicação semelhante, agora como como Windows ApplicationWindows Application Utilize o método Utilize o método ShowShow da classe da classe MessageBoxMessageBox

Exercício 2Exercício 2

Crie um novo projecto C# de Crie um novo projecto C# de Windows Windows ApplicationApplication

Adicione um novo ficheiro de classes (.cs)Adicione um novo ficheiro de classes (.cs) Defina a interface IListaNomes, que deverá Defina a interface IListaNomes, que deverá

incluir interfaces para:incluir interfaces para: Adicionar novo nome à lista de nomesAdicionar novo nome à lista de nomes Retornar a listagem de todos os nomes presentes na Retornar a listagem de todos os nomes presentes na

lista de nomes, sob a forma de uma cadeia de lista de nomes, sob a forma de uma cadeia de caracterescaracteres

Limpar o conteúdo da lista de nomesLimpar o conteúdo da lista de nomes

Exercício 2 (continuação)Exercício 2 (continuação)

Crie uma classe que implemente IListaNomes e Crie uma classe que implemente IListaNomes e crie uma instância dessa classe na sua crie uma instância dessa classe na sua Windows Form. (Utilize a classe ArrayList para Windows Form. (Utilize a classe ArrayList para guardar os nomes)guardar os nomes)

Construa a Windows Form por forma a utilizar Construa a Windows Form por forma a utilizar todas as funcionalidades fornecidas pela todas as funcionalidades fornecidas pela interface IListaNomesinterface IListaNomes

Coloque Coloque breakpoints breakpoints em cada método da classe em cada método da classe e verifique que cada método da mesma é e verifique que cada método da mesma é chamado e executado correctamentechamado e executado correctamente

top related