28
A linguagem C# A linguagem C#

A linguagem C#. Sobre o que iremos falar... As características mais importantes da linguagem C# As características mais importantes da linguagem C# Alguma

Embed Size (px)

Citation preview

Page 1: A linguagem C#. Sobre o que iremos falar... As características mais importantes da linguagem C# As características mais importantes da linguagem C# Alguma

A linguagem C#A linguagem C#

Page 2: A linguagem C#. Sobre o que iremos falar... As características mais importantes da linguagem C# As características mais importantes da linguagem C# Alguma

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

Page 3: A linguagem C#. Sobre o que iremos falar... As características mais importantes da linguagem C# As características mais importantes da linguagem C# Alguma

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

Page 4: A linguagem C#. Sobre o que iremos falar... As características mais importantes da linguagem C# As características mais importantes da linguagem C# Alguma

““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!”); }}}}

Page 5: A linguagem C#. Sobre o que iremos falar... As características mais importantes da linguagem C# As características mais importantes da linguagem C# Alguma

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();

Page 6: A linguagem C#. Sobre o que iremos falar... As características mais importantes da linguagem C# As características mais importantes da linguagem C# Alguma

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

Page 7: A linguagem C#. Sobre o que iremos falar... As características mais importantes da linguagem C# As características mais importantes da linguagem C# Alguma

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

Page 8: A linguagem C#. Sobre o que iremos falar... As características mais importantes da linguagem C# As características mais importantes da linguagem C# Alguma

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!!

Page 9: A linguagem C#. Sobre o que iremos falar... As características mais importantes da linguagem C# As características mais importantes da linguagem C# Alguma

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

Page 10: A linguagem C#. Sobre o que iremos falar... As características mais importantes da linguagem C# As características mais importantes da linguagem C# Alguma

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:

......

Page 11: A linguagem C#. Sobre o que iremos falar... As características mais importantes da linguagem C# As características mais importantes da linguagem C# Alguma

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; }

Page 12: A linguagem C#. Sobre o que iremos falar... As características mais importantes da linguagem C# As características mais importantes da linguagem C# Alguma

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’; }

Page 13: A linguagem C#. Sobre o que iremos falar... As características mais importantes da linguagem C# As características mais importantes da linguagem C# Alguma

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(); }}

Page 14: A linguagem C#. Sobre o que iremos falar... As características mais importantes da linguagem C# As características mais importantes da linguagem C# Alguma

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!

Page 15: A linguagem C#. Sobre o que iremos falar... As características mais importantes da linguagem C# As características mais importantes da linguagem C# Alguma

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); }}}}

Page 16: A linguagem C#. Sobre o que iremos falar... As características mais importantes da linguagem C# As características mais importantes da linguagem C# Alguma

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()”

Page 17: A linguagem C#. Sobre o que iremos falar... As características mais importantes da linguagem C# As características mais importantes da linguagem C# Alguma

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);

Page 18: A linguagem C#. Sobre o que iremos falar... As características mais importantes da linguagem C# As características mais importantes da linguagem C# Alguma

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

Page 19: A linguagem C#. Sobre o que iremos falar... As características mais importantes da linguagem C# As características mais importantes da linguagem C# Alguma

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;

Page 20: A linguagem C#. Sobre o que iremos falar... As características mais importantes da linguagem C# As características mais importantes da linguagem C# Alguma

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++;}}

Page 21: A linguagem C#. Sobre o que iremos falar... As características mais importantes da linguagem C# As características mais importantes da linguagem C# Alguma

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

Page 22: A linguagem C#. Sobre o que iremos falar... As características mais importantes da linguagem C# As características mais importantes da linguagem C# Alguma

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

Page 23: A linguagem C#. Sobre o que iremos falar... As características mais importantes da linguagem C# As características mais importantes da linguagem C# Alguma

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

Page 24: A linguagem C#. Sobre o que iremos falar... As características mais importantes da linguagem C# As características mais importantes da linguagem C# Alguma

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

Page 25: A linguagem C#. Sobre o que iremos falar... As características mais importantes da linguagem C# As características mais importantes da linguagem C# Alguma

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){{ ......}}

Page 26: A linguagem C#. Sobre o que iremos falar... As características mais importantes da linguagem C# As características mais importantes da linguagem C# Alguma

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

Page 27: A linguagem C#. Sobre o que iremos falar... As características mais importantes da linguagem C# As características mais importantes da linguagem C# Alguma

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

Page 28: A linguagem C#. Sobre o que iremos falar... As características mais importantes da linguagem C# As características mais importantes da linguagem C# Alguma

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