Plataforma .net e ao C#

Plataforma .net e ao C#

(Parte 1 de 3)

Página 1

C# Guia de Referência

Autor: Fabio Renato de Almeida

Página 2

Curso C# 1.0 e 2.0 (Guia de Referência do Aluno)

Instrutor: Fábio Renato de Almeida fabiorenato.net@uol.com.br

Introdução a Plataforma .net e ao C# - Aula 01

Página 3

1. Introdução a Plataforma .net e ao C#. 2. Visão Geral (Sistema Operacional).

3. .net Visão Geral (Windows / Linux).

4. Por que .net Framework?

.net (Aplicativos em rede “network”). Framework (Infra-estrutura / Plataforma). .net Framework: Plataforma projetada, desde o início, com o propósito de ser eficiente em aplicações distribuídas.

• LAN (Local Area Network).

• MAN (Metropolitan Area Network).

• WAN (Wide Area Network / Internet).

5. .net Framework - Características.

Totalmente orientado a objeto (O).

• Suporte a classes.

• Mecanismo de herança simples e interfaces.

Introdução a Plataforma .net e ao C# - Aula 01

Página 4

• Funções virtuais (polimorfismo). Case-sensitive. Definição clara de tipos valor e tipos referência.

• Tipos valor: Stack (Pilha).

• Tipos referência: Heap (Área gerenciada).

• Tipos valor que são declarados como um campo em um tipo referência, neste caso, também são armazenados no heap, junto com seu container (boxed values).

♦ Não existe VARIANTnão confunda Object com Variant... mesmo um Object, contém a
especificação do tipo real da instânciae seus métodos polimórficos serão devidamente

• Dados fortemente tipados (type-safe). invocados.

6. .net Framework - Características.

• Int16, Int32, Int64, Single, Double,todas as linguagems que tenham como alvo o .net,

CTS (Common Type System). devem produzir código compilado baseado nesses tipos.

♦ VB.net: Dim valor As Integer => valor (Int32).

♦ Delphi: var valor: Integer; => valor (Int32). CLS (Common Language Specification).

• Conjunto de regras que todos os compiladores que tenham como alvo a plataforma .net devem implementar.

♦ System.Int32 é CLS.

♦ Diferenciação entre maiúsculas e minúsculas não é CLS.

7. .net Framework - Características.

FCL (Framework Class Library): Extensa biblioteca de classes, organizada por espaço de nome (forma de agrupar classes relacionadas, ainda que em assemblies diferentes). Bom design.

• Plataforma .net: FCL.

• Longhorn: FCL.

8. .net Framework - Características.

• C#, Delphi for .net, VB.netapenas a maneira como se escreve... o resultado final é

IL (Intermediate Language). compilado para IL.

• Linguagem de baixo nível, com sintaxe simples, baseada em números ao invés de texto, que pode ser traduzida rapidamente para código nativo.

• A linguagem que o .net reconhece.

• Todos os compiladores para .net produzem código IL.

• Independência de

♦ Plataforma. ⇒ Windows (Microsoft .net Framework).

⇒ Linux, Mac OS X, Solaris, Windows, Unix (Mono).

⇒ C#, VB.net, Delphi for .net, entre outras(mais de 30).

♦ Linguagem. ⇒ Todas geram código IL (Intermediate Language).

⇒ A programação é feita, não para o S.O., mas para a plataforma .net.

9. .net Framework - Características.

Assembly (Montagem). • O assembly pode ser um EXE ou uma DLL.

• Auto-descritivo (Metadados). ♦ Contém informações sobre os membros do assembly.

♦ Contém informações sobre ele mesmo (manifesto).

♦ Versionamento: Fim do Inferno das DLLs (DLL Hell).

Introdução a Plataforma .net e ao C# - Aula 01

Página 5

♦ Strong Name. ♦ Toda informaçao possível sobre o assembly está no próprio assembly. • Não há entradas no registro do sistema (GUID).

• Privado ou compartilhado (GAC: Global Assembly Cache).

• Reflection (Reflexão)através dos metadados.

• Instalação de zero impacto (xcopy).

10. .net Framework - Características.

Interoperabilidade entre linguagens. • Lib1.dll escrita em C#.

• Lib2.dll escrita em VB.net herdando de Lib1.dll.

• Lib3.dll escrita em Delphi for .net herdando de Lib2.dll.

• Lib4.dll escrita em C# herdando de Lib3.dll.

• O mecanismo de tratamento de exceções também permite que exceções lançadas na Lib2.dll possam ser devidamente capturadas e tratadas na Lib4.dll.

1. .net Framework - Características.

Interoperabilidade COM. • Uma classe .net wrapper é criada para gerenciar objetos COM.

• A tecnologia COM é considerada ultrapassada.

• O ideal é escrever as funcionalidades COM em código gerenciável. Segurança.

• Possibilidade de executar um assembly sem risco de código malicioso.

• Um assembly pode conter informações sobre quem ou qual grupo tem permissões para executar determinados métodos no assembly [atributos].

• .net oferece segurança baseada em código. Windows oferece segurança baseada em roles (usuário, grupo, domínio, processo) Ex.: código exe da internet => a segurança baseada em código permite determinarmos que o programa não deve executar determinadas operações, como por exemplo, ler ou gravar variáveis de ambiente, alterar o registro do Windows, etc.

12. .net Framework - Características.

Acesso eficiente a dados.

• Sem ODBC.

• Sem BDE.

• O mecanismo de acesso é feito através de um Provider. O ADO.net expõe uma interface padrão para todos os providers.

• A característica principal do provider é que ele se comunica “diretamente” com o banco de dados (exceto OLE DB e ODBC providers).

• Dados desconectados. Atributos.

• Obsolete.

• Conditional.

• Flags.

• Permite a definição de outros atributos.

13. .net Framework - Runtime.

Compilação (2 fases). • Fase 1: Código fonte é transformado em um assembly (IL).

• Fase 2: O compilador JIT (Just In-Time compiler) processa os byte codes da IL e transforma em código nativo específico da plataforma (podendo sofrer otimizações). O código é compilado conforme solicitação. Managed Code (Código Gerenciado).

• CLR (Common Language Runtime).

♦ Aplicações .net são executadas pelo CLR. Este ambiente, através da FCL, abstrai todo o sistema operacional.

• GC (Garbage Collector).

♦ Liberação automática de memória.

Introdução a Plataforma .net e ao C# - Aula 01

Página 6

♦ Gerenciamento automático de gerações (0, 1 e 2). ♦ Fim do vazamento de memória (Leak Memory).

14. .net Framework - Linguagens.

Visual Basic .net. • Linguagem adaptada para a plataforma.

• Sofreu alterações significativas a ponto de ser considerada uma nova linguagem.

• Herda os vícios da plataforma anterior.

• A linguagem não é 100% orientada a objetos (O compilador faz adaptações para o ambiente .net). Delphi for .net.

• Linguagem adaptada para a plataforma.

• Sofreu menos alterações em relação ao VB.

• Também herda os vícios da plataforma anterior.

• A linguagem não é 100% orientada a objetos (O compilador faz adaptações para o ambiente .net).

15. .net Framework - Linguagens.

C#. • C# (C Sharp – C Aprimorado).

• Projetado especificamente para a plataforma .net. (Nasceu para o .net).

• A arquitetura e as metodologias da linguagem C# refletem as metodologias subjacentes do .net. Em muitos casos, as características da linguagem C#, de fato, dependem das características do .net, ou das classes-base do .net.

• Linguagem baseada na metodologia moderna do projeto orientado a objetos.

• Desenvolvido pela Microsoft: Equipe liderada por Anders Hejlsberg e Scott Wiltamuth.

• Fato!!! Grande parte das classes-base do .net foi escrita em C#.

• Linguagem orientada a objetos (totalmente).

• Suporta sobrecarga de operadoresapesar do .net não suportar este recurso, o compilador

C# traduz para uma chamada a método.

• Conjunto coerente e bem definido de tipos básicos.

16. .net Framework - Linguagens.

C# (continuação). • Suporte para documentação XML.

• Suporte para atributos.

• Amplo acesso a FCL.

• Fácil acesso a API do Windows (raramente necessário).

• Possibilidade de uso de ponteiros e acesso direto a memória (raramente necessário).

• Suporte a propriedades e eventos. • Bem mais fácil que C++.

• Simples/Moderno/Tipo Seguro (type-safe).

problemas de ponteiros, enfima junção de tudo o que há de melhor nesses últimos 20 anos.

• Eficiência da linguagem C++ com a facilidade de ambientes RAD sem a complexidade e

• O fato de C# ter sido projetado especificamente para a plataforma .net, significa que seu suporte ao .net framework é mais completo e também é oferecido em um contexto de uma sintaxe mais apropriada do que outras linguagens.

17. .net Framework - Aplicações.

Tipos de Aplicação. • WebServices (XML).

• Windows Services.

• ASP.net (ThinClient, requer apenas o browser no cliente): Ao contrário do ASP antigo, o código no lado servidor é compilado.

• Console.

• Windows Forms (FatClient, requer o .net Framework no cliente).

Introdução a Plataforma .net e ao C# - Aula 01

Página 7

18. .net Framework - Conclusão.

Plataforma.

• Provavelmente o que reinará nos próximos 20 anos.

Linguagem.

• Escolha C#. .net Compact Framework.

• O .net poderá ser portado para. ♦ Pocket PC (já existe).

♦ Celular (já existe).

♦ Enfimqualquer outro dispositivo, tornando sua aplicação funcional em outros

ambientes. Projeto Mono.

• .net Framework para outras plataformas (w.go-mono.com). Reverse Engineer.

• Obfuscation.

19. .net Framework.

Dúvidas?

Apresentando C# - Aula 02

Página 8

1. Apresentando C#. 2. C#

Nascimento: Dezembro de 1998.

Atributos: Linguagem de programação simples, moderna, type-safe e totalmente orientada a

Versões da linguagem

objeto. type-safe: Em C# é impossível ter problemas devido a variáveis que não foram inicializadas, ou acesso a arrays fora de seus limites ou ainda realizar casts inválidos. Ambiente: .net Framework.

♦ Arquitetos responsáveis (Designers)

⇒ Anders Hejlsberg

⇒ Scott Wiltamuth

⇒ Peter Golde

⇒ Peter Sollich

♦ Arquitetos responsáveis (Designers)

⇒ Eric Gunnerson • 2.0 (VS .net 2005) – .net Framework 2.0. ⇒ Anders Hejlsberg

⇒ Peter Golde

⇒ Peter Hallam

⇒ Shon Katzenberger

⇒ Todd Proebsting

⇒ Anson Horton

[ ] abstract [ ] event [ ] new [ ] struct [ ] as [ ] explicit [ ] null [ ] switch

[ ] base [ ] extern [ ] object [ ] this

[ ] bool [ ] false [ ] operator [ ] throw

[ ] break [ ] finally [ ] out [ ] true

[ ] byte [ ] fixed [ ] override [ ] try

[ ] case [ ] float [ ] params [ ] typeof

[ ] catch [ ] for [ ] private [ ] uint

[ ] char [ ] foreach [ ] protected [ ] ulong

[ ] checked [ ] goto [ ] public [ ] unchecked

[ ] class [ ] if [ ] readonly [ ] unsafe

[ ] const [ ] implicit [ ] ref [ ] ushort

[ ] continue [ ] in [ ] return [ ] using

[ ] decimal [ ] int [ ] sbyte [ ] virtual

[ ] default [ ] interface [ ] sealed [ ] volatile

[ ] delegate [ ] internal [ ] short [ ] void

[ ] do [ ] is [ ] sizeof [ ] while

[ ] double [ ] lock [ ] stackalloc
[ ] else [ ] long [ ] static

[ ] enum [ ] namespace [ ] string

4. Hello World

using System;

Apresentando C# - Aula 02

Página 9 using System.Collections.Generic; using System.Text; namespace Curso.CSharp.HelloWorld { class Program { static void Main(string[] args) {

Console.WriteLine("Hello World."); Console.ReadLine(); }

5. Espaço de Nome (namespace)
Exemplos
Nova aplicação console(Estok.exe)

// Produto.cs using System; using System.Collections.Generic; using System.Text; namespace SoftFacil.Estok { class Produto { }

// Cliente.cs using System; using System.Collections.Generic; using System.Text; namespace SoftFacil.Estok { class Cliente { }

Apresentando C# - Aula 02

Página 10

} // Fornecedor.cs using System; using System.Collections.Generic; using System.Text; namespace SoftFacil.Estok { class Fornecedor { }

// CompraVenda.cs using System; using System.Collections.Generic; using System.Text; namespace SoftFacil.Estok { class Compra { } class Venda { }

// DAL.cs using System; using System.Collections.Generic; using System.Text; namespace SoftFacil.Estok { class Open { public static void OpenDB(string db) {

Console.WriteLine(db + " aberto."); }

// Program.cs using System; using System.Collections.Generic; using System.Text; namespace SoftFacil.Estok { class Program { static void Main(string[] args) {

Console.WriteLine("Estok."); Open.OpenDB("Estok.fdb"); Console.ReadLine();

Apresentando C# - Aula 02

Página 1

Nova aplicação console(Imob.exe)

// Modulos.cs using System; using System.Collections.Generic; using System.Text; namespace SoftFacil.Imob { class Imovel { } class Locador { } class Locatario { }

// DAL.cs using System; using System.Collections.Generic; using System.Text; namespace SoftFacil.Imob { class Open { public static void OpenDB(string db) {

Console.WriteLine(db + " aberto."); }

// Program.cs using System; using System.Collections.Generic; using System.Text; namespace SoftFacil.Imob { class Program { static void Main(string[] args) {

Console.WriteLine("Imob."); Open.OpenDB("Imob.fdb"); Console.ReadLine(); }

Criando um assembly (DAL.dll)...

Apresentando C# - Aula 02

Página 12

// DAL.cs using System; using System.Collections.Generic; using System.Text; namespace SoftFacil.DataAccessLayer { public class Open { public static void OpenDB(string db) {

Console.WriteLine(db + " aberto."); }

Utilizando o assembly em Estok e Imob(Add Reference...)

SoftFacil.DataAccessLayer.Open.OpenDB("Estok.fdb"); SoftFacil.DataAccessLayer.Open.OpenDB("Imob.fdb");

ou

using SoftFacil.DataAccessLayer;

Open.OpenDB("Estok.fdb"); Open.OpenDB("Imob.fdb");

6. C#

Que relação existe entre o nome da classe e seu espaço de nome (fullname) com o nome do arquivo que os contem?

7. De volta a Hello World...

Hell

8. DLL Hell... • App1 acessa versão 1.0 de Lib.dll.

• Instala-se App2App2

sobrescreve versão 1.0 de Lib.dll com versão 2.0 de Lib.dll.

• App2 executa.

• App1 não executa mais (Lib.dll incompatível).

Apresentando C# - Aula 02

Página 13

• Reinstala-se App1. • App1 retorna versão 1.0 de Lib.dll.

• App1 executa.

• Instala-se App2App2 executa, mas App1 não.
• Instala-se App1App1 executa, mas App2 não.
• Instala-seenfim... DLL Hell.
Windows 2000/XP

• App2 não executa mais. • Foi introduzido o recurso de execução lado a lado.

• Instalação da DLL no diretório da aplicação. • LoadLibrary() da Win32 foi re-escrita para acessar primeiramente a pasta local.

9. Assembly

Privado. Compartilhado (GAC). Auto-descritivo (metadados). Não requer registro no Windows.

Manifesto controla versão e dependências. Instalação de zero-impacto.

Vamos criar um assembly compartilhado
10. AssemblyInfo.cs

using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices;

[assembly: AssemblyTitle("DAL")] [assembly: AssemblyDescription("Lib de acesso SoftFácil")]

[assembly: AssemblyConfiguration("Beta 2")]

[assembly: AssemblyCompany("SoftFácil")]

[assembly: AssemblyProduct("DAL")]

[assembly: AssemblyCopyright("Copyright © SoftFácil")]

[assembly: AssemblyTrademark("DAL marca registrada")]

[assembly: AssemblyCulture("")]

1. Assembly Compartilhado (shared)
Criptografia

• Criptografia Simétrica.

• Criptografia Assimétrica (Assinatura digital de um driver no Windows).

• sn –k secret.snk

• secret.snk (chaves private e public). DAL.

• Propriedades do AssemblySigning.

• Major: Versão Primária.

• Minor: Versão Secundária.

• Build: Número de ConstruçãoNúmero de dias desde 1º de Janeiro de 2000.
• Revision: Número de RevisãoNúmero de segundos desde a meia noite da hora local.

• Instala-se o assembly no GAC.

• gacutil /i DAL.dll Consumindo o assembly.

• Add Reference (DLL da pasta bin) – Copy Local é configurado como false.

Apresentando C# - Aula 02

Página 14

• Aprimorando o assembly mas mantendo a versão principal e secundária. • Fazendo uma mudança estrutural de 1.0 para 1.1.

12. Conflito de Nomes
Novo assembly (LibFile.dll)

using System; using System.Collections.Generic; using System.Text; namespace SoftFacil.LibFile { public class Open { public static void OpenFile(string file) {

Console.WriteLine("Arquivo {0} aberto.", file); }

Utilizando o assembly LibFile.dll em Estok.exe (Add Reference)

using System; using System.Collections.Generic; using System.Text; using SoftFacil.DataAccessLayer; namespace SoftFacil.Estok { class Program { static void Main(string[] args) {

Console.WriteLine("Estok."); Open.OpenDB("Estok.fdb"); SoftFacil.LibFile.Open.OpenFile("Dados.txt"); Console.ReadLine(); }

Apresentando C# - Aula 02

ou

Página 15 using System; using System.Collections.Generic; using System.Text; using SoftFacil.DataAccessLayer; using File = SoftFacil.LibFile.Open; namespace SoftFacil.Estok { class Program { static void Main(string[] args) {

Console.WriteLine("Estok."); Open.OpenDB("Estok.fdb"); File.OpenFile("Dados.txt"); Console.ReadLine(); }

13. Unidade de Compilação (Estrutura geral)

// Source File (.cs) – Compilation Unit

using
[GlobalAttributes]
namespace
using
namespace
using
Type1
Type2
14. namespace / using (segredos)

namespace N1.N2 { class A // N1.N2.A { } ou namespace N1 { namespace N2 {

Apresentando C# - Aula 02

Página 16

15. namespace / using (segredos)

namespace N1.N2 { class A // N1.N2.A { } namespace N1.N2 { class B // N1.N2.B { } ou namespace N1.N2 { class A // N1.N2.A { }

16. namespace / using (segredos)

namespace N1.N2 { class A // N1.N2.A { } namespace N3 { using A = N1.N2.A; ou namespace N1.N2 { class A // N1.N2.A { }

Apresentando C# - Aula 02

Página 17 namespace N3 { using R = N1.N2;

17. namespace / using (segredos)

namespace N1.N2 { class A // N1.N2.A { } namespace N3 { using R1 = N1; using R2 = N1.N2; using R3 = N1.N2.A; class B {

R2.Aobj3; // obj3 -> N1.N2.A
R3obj4; // obj4 -> N1.N2.A
18. namespace / using (segredos)

namespace N1.N2 { class A // N1.N2.A { } namespace N3 { using N1.N2;

(Parte 1 de 3)

Comentários