A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

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.

Apresentações semelhantes


Apresentação em tema: "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."— Transcrição da apresentação:

1 A linguagem C#

2 Sobre o que iremos falar... As características mais importantes da linguagem C# As características mais importantes da linguagem C# Alguma comparação c/ Java e C++ Alguma comparação c/ Java e C++ Reflexão crítica: aspectos positivos e negativos Reflexão crítica: aspectos positivos e negativos

3 Porquê C# ?.Net é uma plataforma interessante.Net é uma plataforma interessante Java e C# são semelhantes Java e C# são semelhantes Ainda mais quando sobre.Net Ainda mais quando sobre.Net C# é a linguagem de eleição no.Net C# é a linguagem de eleição no.Net

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

5 Semelhante a Java e C++ public class Pessoa { private string Nome; private string Nome; private int Idade; private int 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();

6 C# - Características Linguagem OO: Linguagem OO: Muito semelhante ao C++ / Java Muito semelhante ao C++ / Java É fácil começar a programar em C# É fácil começar a programar em C# Sistema unificado de tipos Sistema unificado de tipos Tudo pode ser visto como um objecto Tudo pode ser visto como um objecto Suporte directo à Programação Baseada em Componentes Suporte directo à Programação Baseada em Componentes Propriedades, Eventos e Atributos Propriedades, Eventos e Atributos Assemblies Assemblies

7 Tudo é um objecto! int val = 10; object obj = val; int k = (int) obj;// k fica c/ valor 10 System.Int32}Boxing val obj}Unboxing 10 k

8 Tudo é um objecto (2) JAVA Hashtable ht = new Hashtable(); = new Hashtable(); ht.put(new Integer(1), Xpto); ht.put(new Integer(2), Xpti); C# Hashtable ht = new Hashtable(); = new Hashtable(); ht.Add(1, Xpto); ht.Add(2, Xpti); O fim das classes de wrapping! O fim das classes de wrapping!

9 Tudo é um objecto (3) Tudo deriva de System.Object Métodos: Tudo deriva de System.Object Métodos: Equals Equals GetType GetType ToString ToString Finalize Finalize MemberwiseClone MemberwiseClone GetHashCode GetHashCode

10 C# base Controlo de execução Controlo de execução if, for, do, while, switch, foreach... if, for, do, while, switch, foreach... switch sem fall-through: switch sem fall-through: foreach: foreach: int[] tabela = {1, 2, 3}; foreach (int i in tabela) Console.WriteLine({0}, i); Console.WriteLine({0}, i); switch a { case 2: x = 4; goto case 3 // fall-through explícito case 3:...

11 Sistema de Tipos Sistema de Tipos Object String Array ValueType Enum Struct int short byte char float decimal long uint ulong sbyte ushort bool double Class string Nome; int[] tabela; class Pessoa {... } decimal conta; enum Estado { Ligado, Desligado} struct Ponto { int x; int y; }

12 Passagem de parâmetros ref – passagem de tipos-valor por referência ref – passagem de tipos-valor por referência{... char c=c; char c=c; g(ref c); g(ref c);} out - passagem de tipos-valor não inicializados por referência: out - passagem de tipos-valor não inicializados por referência:{... int x; int x; f(out x); f(out x);} void f(out int x) { x=2; } x=2; } void g(ref char pc) { pc =x; } pc =x; }

13 Passagem de parâmetros params – passagem de nº variável de parâmetros params – passagem 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 object[] 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(); }

14 Herança public class Pessoa { private string Nome; private string Nome; private int Idade; private int 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 Pessoa { private string Nome; private string Nome; private int Idade; private int 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 virtual void MostraInfo() { public virtual 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!

15 Herança public class Empregado : Pessoa { private string Empresa; private string Empresa; public Empregado(string nome, int idade, int public Empregado(string nome, int idade, int empresa) empresa) : base(nome, idade) : base(nome, idade) { this.Empresa = empresa; this.Empresa = empresa; } public override void MostraInfo() { public override void MostraInfo() { base.MostraInfo(); base.MostraInfo(); Console.WriteLine(Empresa: {0}, Empresa); Console.WriteLine(Empresa: {0}, Empresa); }}

16 Binding estático vs. dinâmico 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 : 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(); d.Xpto();// Resulta em Deriv.Xpto() d.Xpti();// Resulta em Deriv.Xpti() Base dref = d; dref.Xpto();// Resulta em Base.Xpto() dref.Xpti();// resulta em Deriv.Xpti()

17 Interfaces interface ILeitorCD { void TocaCD(CD cd); void TocaCD(CD cd);} public class Aparelhagem : ILeitorCD { void TocaCD(CD cd) { void TocaCD(CD cd) { }} public class Computador : ILeitorCD { void TocaCD(CD cd) { void TocaCD(CD cd) { }} Aparelhagem sony = new Aparelhagem(); Computador pc = new Computador(); ILeitorCD leitor; leitor = sony; leitor.tocaCD(GreatestHits); leitor = pc; leitor.tocaCD(GreatestHits);

18 Redefinição de Operadores Em C# é possível redefinir os operadores existentes. Em C# é possível redefinir os operadores existentes. Lista A = new Lista(); Lista B = new Lista(); A.Add(1);A.Add(2);B.Add(3);B.Add(4); Lista C = A + B; // Junta ambas as listas

19 Redefinição de Operadores (2) public class Lista { private object[]Elementos; private object[]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 e para // Copia os elementos de e para // a lista // a lista return resultado; return resultado; }} Lista A = new Lista(); Lista B = new Lista();... Lista C = A + B;

20 Unsafe Code O C# suporta elementos avançados, como a utilização de ponteiros O C# suporta elementos avançados, como a utilização de ponteiros Sempre que são utilizados estes elementos, o código tem de ser colocado dentro de um contexto unsafe Sempre que são utilizados estes elementos, o código tem de ser colocado dentro de um contexto unsafe int total = 0; unsafe{ int* ptr = &total; int* ptr = &total; *ptr = 10; *ptr = 10;} public unsafe void FastCopy(byte* dst, byte* src, int count) { for (int i=0; i

21 C# vs. C++ GC destrói objectos inacessíveis GC destrói objectos inacessíveis Tipos de referência e tipos-valor Tipos de referência e tipos-valor Boxing, unboxing Boxing, unboxing Redefinição de métodos tem de ser explícita Redefinição de métodos tem de ser explícita

22 C# vs. C++ (2) boolean não são inteiros boolean não são inteiros switch sem fall-through switch sem fall-through Não se podem usar variáveis sem atribuição ( out ) Não se podem usar variáveis sem atribuição ( out ) Não há métodos globais Não há métodos globais

23 C# vs Java Só há um Main Só há um Main Várias classes num ficheiro Várias classes num ficheiro namespaces em vez de packages namespaces em vez de packages

24 C# vs Java (2) Goto Goto foreach foreach Redefinição de operadores Redefinição de operadores Enumerações Enumerações Tipos-valor e Boxing Tipos-valor e Boxing Código inseguro (unsafe) Código inseguro (unsafe) ref serve para passar por referência ref serve para passar por referência

25 Documentação em XML /// /// /// Este método calcula o ordenado de uma pessoa, /// baseado nos seus dias de trabalho. /// /// /// /// O número de dias que trabalhou. /// /// /// /// O salário da pessoa. /// O salário da pessoa. public int CalculaOrdenado(int diasTrabalho) {......}

26 Exercício 1 Abra o VisualStudio.Net Abra o VisualStudio.Net Construa a aplicação Hello World como Console Application Construa a aplicação Hello World como Console Application Utilize o método WriteLine da classe Console Utilize o método WriteLine da classe Console Construa uma aplicação semelhante, agora como Windows Application Construa uma aplicação semelhante, agora como Windows Application Utilize o método Show da classe MessageBox Utilize o método Show da classe MessageBox

27 Exercício 2 Crie um novo projecto C# de Windows Application Crie um novo projecto C# de Windows Application Adicione um novo ficheiro de classes (.cs) Adicione um novo ficheiro de classes (.cs) Defina a interface IListaNomes, que deverá incluir interfaces para: Defina a interface IListaNomes, que deverá incluir interfaces para: Adicionar novo nome à lista de nomes Adicionar novo nome à lista de nomes Retornar a listagem de todos os nomes presentes na lista de nomes, sob a forma de uma cadeia de caracteres Retornar a listagem de todos os nomes presentes na lista de nomes, sob a forma de uma cadeia de caracteres Limpar o conteúdo da lista de nomes Limpar o conteúdo da lista de nomes

28 Exercício 2 (continuação) Crie uma classe que implemente IListaNomes e crie uma instância dessa classe na sua Windows Form. (Utilize a classe ArrayList para guardar os nomes) Crie uma classe que implemente IListaNomes e crie uma instância dessa classe na sua Windows Form. (Utilize a classe ArrayList para guardar os nomes) Construa a Windows Form por forma a utilizar todas as funcionalidades fornecidas pela interface IListaNomes Construa a Windows Form por forma a utilizar todas as funcionalidades fornecidas pela interface IListaNomes Coloque breakpoints em cada método da classe e verifique que cada método da mesma é chamado e executado correctamente Coloque breakpoints em cada método da classe e verifique que cada método da mesma é chamado e executado correctamente


Carregar ppt "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."

Apresentações semelhantes


Anúncios Google