1 / 28

A linguagem C#

A linguagem C#. Sobre o que iremos falar. As características mais importantes da linguagem C# Alguma comparação c/ Java e C++ Reflexão crítica: aspectos positivos e negativos. Porquê C# ?. .Net é uma plataforma interessante Java e C# são semelhantes Ainda mais quando sobre .Net

osbourne
Télécharger la présentation

A linguagem C#

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. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. A linguagem C#

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

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

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

  5. Semelhante a Java e C++ public class Pessoa { private string Nome; private int Idade; public Pessoa(string nome, int idade) { this.Nome = nome; this.Idade = idade; } public void MostraInfo() { Console.WriteLine(“{0}, tem {1} anos”, Nome, Idade); } } Pessoa Cliente = new Pessoa(“Carlos”, 25); Cliente.MostraInfo();

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

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

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

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

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

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

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

  13. Passagem de parâmetros • params – passagem de nº variável de parâmetros public static void Main() { UseParams(1, 'a', "test"); int[] myarray = new int[3] {10,11,12}; UseParams(myarray); } public static void UseParams(params object[] list) { for ( int i = 0 ; i < list.Length ; i++ ) Console.WriteLine(list[i]); Console.WriteLine(); }

  14. public class Pessoa { private string Nome; private int Idade; public Pessoa(string nome, int idade) { this.Nome = nome; this.Idade = idade; } public virtual void MostraInfo() { Console.WriteLine(“{0}, tem {1} anos”, Nome, Idade); } } • Por omissão, os métodos não são virtuais! Herança public class Pessoa { private string Nome; private int Idade; public Pessoa(string nome, int idade) { this.Nome = nome; this.Idade = idade; } public void MostraInfo() { Console.WriteLine(“{0}, tem {1} anos”, Nome, Idade); } }

  15. Herança public class Empregado : Pessoa { private string Empresa; public Empregado(string nome, int idade, int empresa) : base(nome, idade) { this.Empresa = empresa; } public override void MostraInfo() { base.MostraInfo(); Console.WriteLine(“Empresa: {0}”, Empresa); } } • Por omissão, os métodos não são virtuais!

  16. Binding estático vs. dinâmico public class Base { void Xpto() { Console.WriteLine(“Base.Xpto()”); } virtual void Xpti() { Console.WriteLine(“Base.Xpti()”); } } public class Derivada : Base { new void Xpto() { Console.WriteLine(“Deriv.Xpto()”); } 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); } public class Aparelhagem : ILeitorCD { void TocaCD(CD cd) { ... } } Aparelhagem sony = new Aparelhagem(); Computador pc = new Computador(); ILeitorCD leitor; leitor = sony; leitor.tocaCD(GreatestHits); leitor = pc; leitor.tocaCD(GreatestHits); public class Computador : ILeitorCD { void TocaCD(CD cd) { ... } }

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

  20. Unsafe Code • 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 int total = 0; unsafe { int* ptr = &total; *ptr = 10; } public unsafe void FastCopy(byte* dst, byte* src, int count) { for (int i=0; i<count; i++) *dst++ = *src++; }

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

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

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

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

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

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

  27. Exercício 2 • Crie um novo projecto C# de Windows Application • Adicione um novo ficheiro de classes (.cs) • Defina a interface IListaNomes, que deverá incluir interfaces para: • 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 • 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) • 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

More Related