![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](https://reader035.vdocuments.site/reader035/viewer/2022062700/552fc11a497959413d8c972a/html5/thumbnails/1.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062700/552fc11a497959413d8c972a/html5/thumbnails/2.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062700/552fc11a497959413d8c972a/html5/thumbnails/3.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062700/552fc11a497959413d8c972a/html5/thumbnails/4.jpg)
““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](https://reader035.vdocuments.site/reader035/viewer/2022062700/552fc11a497959413d8c972a/html5/thumbnails/5.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062700/552fc11a497959413d8c972a/html5/thumbnails/6.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062700/552fc11a497959413d8c972a/html5/thumbnails/7.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062700/552fc11a497959413d8c972a/html5/thumbnails/8.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062700/552fc11a497959413d8c972a/html5/thumbnails/9.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062700/552fc11a497959413d8c972a/html5/thumbnails/10.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062700/552fc11a497959413d8c972a/html5/thumbnails/11.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062700/552fc11a497959413d8c972a/html5/thumbnails/12.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062700/552fc11a497959413d8c972a/html5/thumbnails/13.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062700/552fc11a497959413d8c972a/html5/thumbnails/14.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062700/552fc11a497959413d8c972a/html5/thumbnails/15.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062700/552fc11a497959413d8c972a/html5/thumbnails/16.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062700/552fc11a497959413d8c972a/html5/thumbnails/17.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062700/552fc11a497959413d8c972a/html5/thumbnails/18.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062700/552fc11a497959413d8c972a/html5/thumbnails/19.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062700/552fc11a497959413d8c972a/html5/thumbnails/20.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062700/552fc11a497959413d8c972a/html5/thumbnails/21.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062700/552fc11a497959413d8c972a/html5/thumbnails/22.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062700/552fc11a497959413d8c972a/html5/thumbnails/23.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062700/552fc11a497959413d8c972a/html5/thumbnails/24.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062700/552fc11a497959413d8c972a/html5/thumbnails/25.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062700/552fc11a497959413d8c972a/html5/thumbnails/26.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062700/552fc11a497959413d8c972a/html5/thumbnails/27.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062700/552fc11a497959413d8c972a/html5/thumbnails/28.jpg)
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