![Page 1: 1 C# Tiago Tagliari Martinez Sistemas de Objetos Distribuídos 25/06/2002](https://reader034.vdocuments.us/reader034/viewer/2022052618/552fc113497959413d8c70a3/html5/thumbnails/1.jpg)
1
C#
Tiago Tagliari Martinez
Sistemas de Objetos Distribuídos
25/06/2002
![Page 2: 1 C# Tiago Tagliari Martinez Sistemas de Objetos Distribuídos 25/06/2002](https://reader034.vdocuments.us/reader034/viewer/2022052618/552fc113497959413d8c70a3/html5/thumbnails/2.jpg)
2
Resumo da Apresentação
• “Hello World”
• Básicos do ambiente .NET
• Objetivos da C#
• Recursos da Linguagem
![Page 3: 1 C# Tiago Tagliari Martinez Sistemas de Objetos Distribuídos 25/06/2002](https://reader034.vdocuments.us/reader034/viewer/2022052618/552fc113497959413d8c70a3/html5/thumbnails/3.jpg)
3
Hello World!
using System;
class Hello{ static void Main() { Console.WriteLine(“Hello world!”); }}
![Page 4: 1 C# Tiago Tagliari Martinez Sistemas de Objetos Distribuídos 25/06/2002](https://reader034.vdocuments.us/reader034/viewer/2022052618/552fc113497959413d8c70a3/html5/thumbnails/4.jpg)
4
Básicos do Ambiente .NET
• Common Language Runtime – CLR– Independência de linguagem– Classes comuns entre todas as linguagens– Tipos comuns entre todas as linguagens
• WebServices– XML / SOAP
![Page 5: 1 C# Tiago Tagliari Martinez Sistemas de Objetos Distribuídos 25/06/2002](https://reader034.vdocuments.us/reader034/viewer/2022052618/552fc113497959413d8c70a3/html5/thumbnails/5.jpg)
5
Objetivos da C#
• Linguagem Orientada a Componentes
• Tudo é um objeto
• Ambiente de Execução Controlado
• Facilidade de Aprendizado
• Interoperabilidade
![Page 6: 1 C# Tiago Tagliari Martinez Sistemas de Objetos Distribuídos 25/06/2002](https://reader034.vdocuments.us/reader034/viewer/2022052618/552fc113497959413d8c70a3/html5/thumbnails/6.jpg)
6
Linguagem Orientada a Componentes
• Conceitos de Componentes Fazem Parte da Linguagem– Propriedades, Métodos e Eventos– Atributos de desenvolvimento e de execução– Documentação integrada usando XML
• Redução de Dependências– Não são necessários arquivos externos (IDL,
cabeçalhos, etc)
![Page 7: 1 C# Tiago Tagliari Martinez Sistemas de Objetos Distribuídos 25/06/2002](https://reader034.vdocuments.us/reader034/viewer/2022052618/552fc113497959413d8c70a3/html5/thumbnails/7.jpg)
7
Tudo é um Objeto
• C++, Java: tipos primitivos “mágicos” fora da hierarquia de classes
• Smalltalk, Lisp: tipos primitivos são objetos a um custo de performance
• C# unifica tipos primitivos e objetos, prometendo nenhuma perda de performance
• Novos tipos primitivos: SQL, Decimal• Coleções funcionam para todos os tipos de
maneira uniforme
![Page 8: 1 C# Tiago Tagliari Martinez Sistemas de Objetos Distribuídos 25/06/2002](https://reader034.vdocuments.us/reader034/viewer/2022052618/552fc113497959413d8c70a3/html5/thumbnails/8.jpg)
8
Facilidade de Aprendizado
• Herança de C++– namespace, enum, unsigned, ponteiros (em
blocos de código “unsafe”)
• Adições– foreach, switch com strings– Tipo decimal para aplicações financeiras– Parâmetros ref e out
![Page 9: 1 C# Tiago Tagliari Martinez Sistemas de Objetos Distribuídos 25/06/2002](https://reader034.vdocuments.us/reader034/viewer/2022052618/552fc113497959413d8c70a3/html5/thumbnails/9.jpg)
9
Ambiente de Execução Controlado
• Coleta de Lixo
• Tratamento de Excessões
• Elimina tipos não inicializados e conversões de tipo inseguras
• Mecanismos para controle de versões embutido no ambiente de execução e na linguagem
![Page 10: 1 C# Tiago Tagliari Martinez Sistemas de Objetos Distribuídos 25/06/2002](https://reader034.vdocuments.us/reader034/viewer/2022052618/552fc113497959413d8c70a3/html5/thumbnails/10.jpg)
10
Interoperabilidade
• Com outras linguagens da .NET
• WebServices usando XML/SOAP
• COM / Automação OLE
• DLLs locais e sistema operacional (código marcado como inseguro)
![Page 11: 1 C# Tiago Tagliari Martinez Sistemas de Objetos Distribuídos 25/06/2002](https://reader034.vdocuments.us/reader034/viewer/2022052618/552fc113497959413d8c70a3/html5/thumbnails/11.jpg)
11
Recursos da Linguagem
• Estrutura do Programa• Hierarquia de Tipos• Classes e Estruturas• Interfaces e Enumerações• Delegates (Delegação?)• Propriedades e Indexadores• Eventos• Sobrecarga de operadores• Controle de Versão• Código Inseguro
![Page 12: 1 C# Tiago Tagliari Martinez Sistemas de Objetos Distribuídos 25/06/2002](https://reader034.vdocuments.us/reader034/viewer/2022052618/552fc113497959413d8c70a3/html5/thumbnails/12.jpg)
12
Estrutura do Programa
• Namespaces– Contém tipos e outros namespaces
• Declaração de Tipos– Classes, estruturas, interfaces, enumerações e delegates
• Membros– Constantes, campos, métodos, propriedades,
indexadores, eventos, operadores, construtores e destrutores
• Indepêndencia da ordem de declaração– Implementação junto com declaração (Java)
![Page 13: 1 C# Tiago Tagliari Martinez Sistemas de Objetos Distribuídos 25/06/2002](https://reader034.vdocuments.us/reader034/viewer/2022052618/552fc113497959413d8c70a3/html5/thumbnails/13.jpg)
13
Estrutura do Programausing System;Namespace System.Collections{ public class Stack
{ Entry top; public void Push(object data) { top = new Entry(top, data); } public object Pop() { if (top == null) throw new InvalidOperationException(); object result = top.data; top = top.next; return result; } }}
![Page 14: 1 C# Tiago Tagliari Martinez Sistemas de Objetos Distribuídos 25/06/2002](https://reader034.vdocuments.us/reader034/viewer/2022052618/552fc113497959413d8c70a3/html5/thumbnails/14.jpg)
14
Tipos
• Value types– Contém diretamente o valor– Não podem ser nulos
• Reference types– Contém uma referência para um objeto– Podem ser nulos
![Page 15: 1 C# Tiago Tagliari Martinez Sistemas de Objetos Distribuídos 25/06/2002](https://reader034.vdocuments.us/reader034/viewer/2022052618/552fc113497959413d8c70a3/html5/thumbnails/15.jpg)
15
Tipos
int i = 123;
string s = “SOD é legal”;
i
s
123
“SOD é legal”
![Page 16: 1 C# Tiago Tagliari Martinez Sistemas de Objetos Distribuídos 25/06/2002](https://reader034.vdocuments.us/reader034/viewer/2022052618/552fc113497959413d8c70a3/html5/thumbnails/16.jpg)
16
Tipos
• Tipos Valor– Primitivos int i;
– Enumerações enum Cor {Azul, Verde}
– Estruturas struct Point {int x, y;}
• Tipos Referência– Classes class A : B, IC {...}
– Interfaces interface IA : IB {...}
– Vetores string[] v = new string[10];
– Delegações delegate void Algo();
![Page 17: 1 C# Tiago Tagliari Martinez Sistemas de Objetos Distribuídos 25/06/2002](https://reader034.vdocuments.us/reader034/viewer/2022052618/552fc113497959413d8c70a3/html5/thumbnails/17.jpg)
17
Tipos Predefinidos
• Tipos predefinidos do C#:– Referenciados object, string
– Com sinal sbyte, short, int, long
– Sem sinal byte, ushort, uint, ulong
– Caractere char
– Ponto flutuante float, double, decimal
– Lógico bool
• Tipos são apelidos para tipos do .NET– int = System.Int32
![Page 18: 1 C# Tiago Tagliari Martinez Sistemas de Objetos Distribuídos 25/06/2002](https://reader034.vdocuments.us/reader034/viewer/2022052618/552fc113497959413d8c70a3/html5/thumbnails/18.jpg)
18
Classes
• Herança simples• Implementação de múltiplas interfaces• Membros de uma classe:
– Constantes, campos, métodos, propriedades, indexadores, eventos, operadores, construtores e destrutores
– Membros estáticos e da instância– Sub-tipos
• Acesso a membros– Public, protected, internal e private
![Page 19: 1 C# Tiago Tagliari Martinez Sistemas de Objetos Distribuídos 25/06/2002](https://reader034.vdocuments.us/reader034/viewer/2022052618/552fc113497959413d8c70a3/html5/thumbnails/19.jpg)
19
Estruturas
• Como classes, exceto que:– Armazenados na pilha– Atribuição copia os dados e não a referência– Não permitem herança!
• Ideal para objetos menores– Complex, Point, Rectangle, Color– int, float, double, etc... são estruturas
• Vantagens– Sem alocações na heap, menos trabalho para o C. Lixo– Uso mais eficiente da memória
![Page 20: 1 C# Tiago Tagliari Martinez Sistemas de Objetos Distribuídos 25/06/2002](https://reader034.vdocuments.us/reader034/viewer/2022052618/552fc113497959413d8c70a3/html5/thumbnails/20.jpg)
20
Interfaces• Herança múltipla• Pode conter métodos, propriedades,
indexadores e eventos• Implementações privadas
interface IDesenhavel{ void Desenha(Superficie destino);}
class Triangulo : IDesenhavel{ void Desenha(Superficie destino);}
![Page 21: 1 C# Tiago Tagliari Martinez Sistemas de Objetos Distribuídos 25/06/2002](https://reader034.vdocuments.us/reader034/viewer/2022052618/552fc113497959413d8c70a3/html5/thumbnails/21.jpg)
21
Enumerações• Fortemente Tipadas
– Sem conversão implícita de/para int
– Operadores: +, -, ++, --, &, |, ^, ~
• Pode especificar o tipo interno– byte, short, long
enum Cor : byte{ Red = 1, Green = 2, Blue = 4, Black = 0, White = Red | Green | Blue;}
![Page 22: 1 C# Tiago Tagliari Martinez Sistemas de Objetos Distribuídos 25/06/2002](https://reader034.vdocuments.us/reader034/viewer/2022052618/552fc113497959413d8c70a3/html5/thumbnails/22.jpg)
22
Delegações• Ponteiros para funções orientados a objetos• Múltiplos recipientes
– Cada delegação tem uma lista de invocação– Operações + e – seguras entre threads
• Base para o sistema de eventos da .NET
delegate void MouseEvent(int x, int y);delegate double Func(double x);
Func func = new Func(Math.Sin);double x = func(1.0);
![Page 23: 1 C# Tiago Tagliari Martinez Sistemas de Objetos Distribuídos 25/06/2002](https://reader034.vdocuments.us/reader034/viewer/2022052618/552fc113497959413d8c70a3/html5/thumbnails/23.jpg)
23
Hierarquia de Tipos
• Tudo deriva da classe object
• Boxing / Unboxing
object
Stream Hashtable
MemoryStream FileStream
int double
![Page 24: 1 C# Tiago Tagliari Martinez Sistemas de Objetos Distribuídos 25/06/2002](https://reader034.vdocuments.us/reader034/viewer/2022052618/552fc113497959413d8c70a3/html5/thumbnails/24.jpg)
24
Desenvolvimento de Componentes
• O que define um componente?– Propriedades, métodos e eventos– Documentação integrada– Informações para desenvolvimento
• Suporte interno para estes elementos:– Sem nomenclatura padrão, adaptadores, etc...– Sem necessidade de arquivos externos
![Page 25: 1 C# Tiago Tagliari Martinez Sistemas de Objetos Distribuídos 25/06/2002](https://reader034.vdocuments.us/reader034/viewer/2022052618/552fc113497959413d8c70a3/html5/thumbnails/25.jpg)
25
Propriedades
• Sintaxe simples, controle de acesso
Public class Button: Control{ private string caption;
public string Caption { get { return caption; } set { caption = value; Repaint(); } }}
![Page 26: 1 C# Tiago Tagliari Martinez Sistemas de Objetos Distribuídos 25/06/2002](https://reader034.vdocuments.us/reader034/viewer/2022052618/552fc113497959413d8c70a3/html5/thumbnails/26.jpg)
26
Indexadores
Public class ListBox: Control{ private string[] items; public string this[int index] { get { return items[index]; } set { items[index] = value; Repaint(); } }}
![Page 27: 1 C# Tiago Tagliari Martinez Sistemas de Objetos Distribuídos 25/06/2002](https://reader034.vdocuments.us/reader034/viewer/2022052618/552fc113497959413d8c70a3/html5/thumbnails/27.jpg)
27
Criando e Disparando Eventos
public delegate void EventHandler(object sender, EventArgs e);
public class Button
{
public EventHandler Click;
protected void OnClick(EventArgs e) {
if (Click != null) Click(this, e);
}
}
![Page 28: 1 C# Tiago Tagliari Martinez Sistemas de Objetos Distribuídos 25/06/2002](https://reader034.vdocuments.us/reader034/viewer/2022052618/552fc113497959413d8c70a3/html5/thumbnails/28.jpg)
28
Tratando o Evento
public class MyForm: Form{ Button okButton;
public MyForm() { okButton = new Button(...); okButton.Caption = “OK”; okButton.Click += new EventHandler(OkButtonClick); }
void OkButtonClick(object sender, EventArgs e) { ShowMessage(“Botão Ok!”); }}
![Page 29: 1 C# Tiago Tagliari Martinez Sistemas de Objetos Distribuídos 25/06/2002](https://reader034.vdocuments.us/reader034/viewer/2022052618/552fc113497959413d8c70a3/html5/thumbnails/29.jpg)
29
Atributos
• Associar informações a tipos e membros– URL de documentação para uma classe– Contexto de transação para um método– XML de mapeamento de persistência
![Page 30: 1 C# Tiago Tagliari Martinez Sistemas de Objetos Distribuídos 25/06/2002](https://reader034.vdocuments.us/reader034/viewer/2022052618/552fc113497959413d8c70a3/html5/thumbnails/30.jpg)
30
Atributos
public class TrataPedidos
{
[WebMethod]
public void FazPedido(OrdemPedido pedido) {...}
}
[XmlRoot(“Pedido”, Namespace=“urn:acme.b2b-schema.v1”)]
public class OrdemPedido
{
[XmlElement(“endereco”)] public string Endereco;
[XmlElement(“cobrar”)] public string Cobranca;
[XmlElement(“items”)] public Items[] Items;
}
![Page 31: 1 C# Tiago Tagliari Martinez Sistemas de Objetos Distribuídos 25/06/2002](https://reader034.vdocuments.us/reader034/viewer/2022052618/552fc113497959413d8c70a3/html5/thumbnails/31.jpg)
31
Construções e Expressões
• if, while, do requer condição booleana
• switch sem continuar para o próximo
• foreach
• Expressões checked e unchecked
• Expressões devem executar alguma operação
![Page 32: 1 C# Tiago Tagliari Martinez Sistemas de Objetos Distribuídos 25/06/2002](https://reader034.vdocuments.us/reader034/viewer/2022052618/552fc113497959413d8c70a3/html5/thumbnails/32.jpg)
32
Código Inseguro
• Blocos de código ou métodos podem ser marcados como unsafe
• Aritmética de ponteiros
• Chamada a outros métodos unsafe
![Page 33: 1 C# Tiago Tagliari Martinez Sistemas de Objetos Distribuídos 25/06/2002](https://reader034.vdocuments.us/reader034/viewer/2022052618/552fc113497959413d8c70a3/html5/thumbnails/33.jpg)
33
Conclusão
• Nenhuma revolução ou grande inovação
• Coleção de diversas pequenas idéias de diversos outros lugares
• Voltado ao mercado Windows e Internet
• Influência da Microsoft não é despresível
![Page 34: 1 C# Tiago Tagliari Martinez Sistemas de Objetos Distribuídos 25/06/2002](https://reader034.vdocuments.us/reader034/viewer/2022052618/552fc113497959413d8c70a3/html5/thumbnails/34.jpg)
34
Referências
• Programming C#, Jesse Liberty, O’Reilly & Associates
• C# Language Specification, Microsoft Corp
• C# Station, http://www.csharp-station.com/
• C# Corner, http://www.c-sharpcorner.com/
• C# Today, http://www.csharptoday.com/