Baixe linguagem C# e outras Notas de estudo em PDF para Informática, somente na Docsity!
C# Guia de
Referência
Autor:
Fabio Renato de Almeida
Curso C# 1.0 e 2.
(Guia de Referência do Aluno)
Instrutor: Fábio Renato de Almeida
Introdução a Plataforma .net e ao C# - Aula 01
- 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 ).
- Dados fortemente tipados ( type-safe ). ♦ Não existe VARIANT... não confunda Object com Variant... mesmo um Object, contém a especificação do tipo real da instância... e seus métodos polimórficos serão devidamente invocados. 6. .net Framework - Características.
CTS ( Common Type System ).
- Int16 , Int32 , Int64 , Single , Double , ... todas as linguagems que tenham como alvo o .net, devem produzir código compilado baseado nesses tipos. ♦ VB.net: Dim valor As Integer => valor ( Int32 ). ♦ C#: int valor; => 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. ♦ System.UInt16 (0...65535) não é 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.
- Win 3.x, 95, 98, Me, 2000, XP, 2003: API.
- Plataforma .net: FCL.
- Longhorn: FCL. 8. .net Framework - Características.
IL ( Intermediate Language ).
- C#, Delphi for .net, VB.net... apenas a maneira como se escreve... o resultado final é 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). ♦ Linguagem. ⇒ C#, VB.net, Delphi for .net, entre outras... (mais de 30). ⇒ 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
♦ 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. 11. .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
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). ♦ Enfim... qualquer outro dispositivo, tornando sua aplicação funcional em outros ambientes. Projeto Mono.
- .net Framework para outras plataformas (www.go-mono.com). Reverse Engineer.
- Obfuscation. 19. .net Framework.
Dúvidas?
Apresentando C# - Aula 02
1. Apresentando C#.
2. C#
Nascimento: Dezembro de 1998. Atributos: Linguagem de programação simples , moderna , type-safe e totalmente orientada a 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. Versões da linguagem...
- 1.0 (VS .net 2002 e 2003) – .net Framework 1.0 e 1.1. ♦ Arquitetos responsáveis (Designers)... ⇒ Anders Hejlsberg ⇒ Scott Wiltamuth ⇒ Peter Golde ⇒ Peter Sollich ⇒ Eric Gunnerson
- 2.0 (VS .net 2005) – .net Framework 2.0. ♦ Arquitetos responsáveis (Designers)... ⇒ Anders Hejlsberg ⇒ Peter Golde ⇒ Peter Hallam ⇒ Shon Katzenberger ⇒ Todd Proebsting ⇒ Anson Horton 3. Keywords...
[ ] 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
}
// 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
} } }
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
- Reinstala-se App.
- App1 retorna versão 1.0 de Lib.dll.
- App1 executa.
- App2 não executa mais.
- Instala-se App2 ... App2 executa , mas App1 não.
- Instala-se App1 ... App1 executa , mas App2 não.
- Instala-se... enfim... DLL Hell. Windows 2000/XP...
- 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("")]
[assembly: ComVisible(false)] [assembly: Guid("77fe6609-b9a2-4600-8ef2-a746cc333c4e")]
[assembly: AssemblyVersion("1.0.*")] [assembly: AssemblyFileVersion("1.0.0.0")]
11. 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 Assembly... Signing.
- [assembly: AssemblyVersion("1.0.")]*
- Major : Versão Primária.
- Minor : Versão Secundária.
- Build : Número de Construção... Número de dias desde 1º de Janeiro de 2000.
- Revision : Número de Revisão... Nú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
- 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
class A // N1.N2.A { }
class B // N1.N2.B { } } }
15. namespace / using (segredos)...
namespace N1.N { class A // N1.N2.A { } }
namespace N1.N { class B // N1.N2.B { } }
ou
namespace N1.N { class A // N1.N2.A { }
class B // N1.N2.B { } }
16. namespace / using (segredos)...
namespace N1.N { class A // N1.N2.A { } }
namespace N { using A = N1.N2.A;
class B : A // N3.B -> N1.N2.A { } }
ou
namespace N1.N { class A // N1.N2.A { }
Apresentando C# - Aula 02
}
namespace N { using R = N1.N2;
class B : R.A // N3.B -> N1.N2.A { } }
17. namespace / using (segredos)...
namespace N1.N { class A // N1.N2.A { } }
namespace N { using R1 = N1; using R2 = N1.N2; using R3 = N1.N2.A;
class B { N1.N2.A obj1; // obj1 -> N1.N2.A R1.N2.A obj2; // obj2 -> N1.N2.A R2.A obj3; // obj3 -> N1.N2.A R3 obj4; // obj4 -> N1.N2.A } }
18. namespace / using (segredos)...
namespace N1.N { class A // N1.N2.A { } }
namespace N { using N1.N2;
class B : A // N3.B -> N1.N2.A { } }
19. namespace / using (segredos)...
namespace N { class A // N1.A { } }
namespace N {
Apresentando C# - Aula 02
}
20. C#...
Dúvidas?
C# Fundamentos - Aula 03
**1. C# Fundamentos
- Keywords...**
[ ] 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
3. Comentários
Comentários de uma única linha (//). Comentários de mais de uma linha (/* ... */).
using System; using System.Collections.Generic; using System.Text;
namespace Curso.CSharp.HelloWorld { class Program { static void Main(string[] args) { Console.WriteLine("Hello World."); Console.ReadLine(); // Aguarda pressionamento da tecla Enter } } }