Documente Academic
Documente Profesional
Documente Cultură
MÓDULO 1
C# - Uma nova linguagem
Alternativa mais “limpa” ao C++
Desenvolvido em conjunto com o .NET por
Anders Hejlsberg
Atraente a desenvolvedores de outras
linguagens que não o VB (C/C++, Java, etc)
Por que uma nova linguagem?
O “equilíbrio” que era bom nos anos 70/80 (C) e
80/90 (C++) não é bom hoje:
ponteiros/malloc/free: é um mecanismo muito
frágil, especialmente para servidores de
aplicativos
Não suportam componentes diretamente
Fragilidade em ter vários arquivos (.CPP, .H, .LIB)
Problemas tradicionais:
C++, Java, Delphi: tipos primitivos são “mágicos” e
não-OOP
Smalltalk, Lisp: tudo é objeto, mas custo de
performance é grande
C# unifica os tipos sem custo de performance
Coleções funcionam com todos os tipos
struct e enum, além de inteiros, ponto flutuante
e decimal são tipos-valor (baratos)
C# - Além do C++ : robustez
Coleta de lixo (Garbage Collector)
Robustez e facilidade de uso
Exceptions: mecanismo único de tratamento de
erros
Tipos seguros: o sistema de tipos jamais pode
ser violado; todas as coerções são verificadas
Considerações de versão feitas desde o início
(exemplo: atributos virtual, override, new)
C# - Compilação e execução
Compilação
Compilador Código (IL)
Código da Assembly
Fonte Metadados
Linguagem
Código Compilador
Nativo JIT
Execução
C# - Estrutura do programa
Execução do programa começa no método Main()
A palavra-chave using referencia namespaces da
Biblioteca de Classes do .NET Framework
Instruções são comandos que executam ações
Um programa é feito de muitas instruções
Instruções são separadas por ponto-e-vírgula
Chaves são usadas para agrupar instruções
using System;
class AloMundo {
static void Main() {
Console.WriteLine (“Alo, Mundo!”);
}
}
Laboratório
MÓDULO 2
Sistema de tipos
Tipos-valor
Contém os dados diretamente
Não podem ser “null”
Tipos-referência
Contém referências para objetos
Podem ser “null”
int i = 123;
string s = "CTXML";
i 123
s "CTXML"
Sistema de tipos
Tipos-valor
Primitivos int i;
Enumerações enum State { Off, On }
Estruturas struct Point { int x, y; }
Tipos-referência
Framework C#
Sistema de tipos
sbyte -128 a +127 8-bit com sinal
byte 0 a 255 8-bit sem sinal
short -32.768 a +32.767 16-bit com sinal
ushort 0 a 65535 16-bit sem sinal
int -2.147.483.648 a +2.147.483.647 32-bit com sinal
uint 0 a 4.294.967.295 32-bit sem sinal
-9.223.372.036.854.775.808 a
long 64-bit com sinal
+9.223.372.036.854.775.807
ulong 0 a 18.446.744.073.709.551.615 64-bit sem sinal
char U+0000 a U+ffff 16-bit Unicode
float 1,5x10-45 a 3,4x10+38 32-bit ponto flutuante
double 5,0x10-324 a 1,7x10+308 64-bit ponto flutuante
bool true ou false
decimal 1,0 × 10-28 a 7,9 × 10+28 128-bit ponto flutuante
Conversão de tipos
Implícita
Executada pelo compilador em operações em que há
garantia de que a informação não será truncada ou
perdida
int x = 123456; // 32 bits
long y = x; // coerção implícita para 64 bits
Explícita
Quando explicitamente é pedido ao compilador para
converter uma informação que pode ser perdida
int x = 65537; // 32 bits
byte z = (byte) x;
// coerção explícita para 8 bits
Conversão de Tipos
System.Convert
Mecanismo do framework para conversão
explícita de tipos.
Convert.To<Tipo> (string valor)
string x = “123456”;
int y = Convert.ToInt(x); //conversão
//Explícita para Int
Conversão de Tipos
TryParse
Válido para todos os tipos valor
string x= “123456”;
int saida;
bool sucesso;
sucesso = Int32.TryParse(x,saida); //successo = true
//saida = 123456
X = “blahblah”
sucesso = Int32.TryParse(x,saida); //sucesso = false
//saida = 0
Declaração de variáveis
Declarando
1
Atribuindo um tipo int numero;
2
Atribuindo um nome
string palavra;
3
Ponto-e-vírgula no final
Inicializando
–
1 Use operador de atribuição
–
2 Atribuindo um valor string s = ".net";
–
3 Ponto-e-vírgula no final
Atribuindo valores literais
1– Adicione um sufixo de tipo decimal val = 100M;
Declaração de constantes
MemoryStream FileStream
Sistema de tipos
Boxing
Utilizar um tipo-valor de maneira consistente com um tipo-
referência
Compilador aloca um objeto e copia valor
Unboxing
Obter o tipo-valor que sofreu a operação de boxing
Verifica tipo e copia valor
int i = 123;
object o = i;
int j = (int)o;
i 123
o System.Int32
123
j 123
Enumerações
Definindo enumerações
enum Planeta {
Mercurio,
Venus,
Terra,
Marte
}
Usando enumerações
Planeta umPlaneta = Planeta.Marte;
Mostrando variáveis
Console.WriteLine(“Planeta:“+umPlaneta);
Laboratório
MÓDULO 3
O que é um programa ?
Programa:
Conjunto de objetos que se comunicam.
Purrer = ronronador
Pouncer = espreitador
Dog taunter = irritador de cachorro
Wool tangler = embaralhador de lâ
Exemplos
Método 1
Método 2 Métodos
Método 3 (definem o comportamento do objeto)
Exemplo
Lampada
acende
apaga
Abstração
Modelo abstração
Uma abstração foca nas características essenciais
de um objeto relativas a perspectiva do usuário.
•Por exemplo,
não foi o caso de
representar se a
lâmpada estava
queimada ou não.
Noção de estado
aceso apagado
acende
Classes e objetos
veículos
Ferrari
Veículo objeto1
IDN8810
marca
placa instâncias
ler_placa Fiat Uno
IAS3333 objeto2
classe
Classes
Modificadores de Acesso
public, protected, internal, private
Exemplo de classe completa
class Lampada {
private bool aceso; Atributo
public Lampada(){
aceso = false;
} Construtor
Parâmetro de entrada/saída
public void ParaMaiuscula(ref string s) {…}
ParaMaiuscula(ref frase);
Parâmetros variáveis
public void MostrarLista(params int[] lista) {…}
int[] array = new int[3] {1,2,3};
MostrarLista(array);
MostrarLista(1,2,3);
MosttarLista(1,2,3,4,5);
Modificadores de acesso
Modificadores de acesso são utilizados para
definir níveis de acesso a membros das classes
Declaração Definição
public Acesso ilimitado
Acessando propriedades
proximoCliente.Nome = "Microsoft";
Laboratório
Atributos read-only
Definidos pela palavra-chave readonly
Definidos em tempo de execução através do
construtor
public readonly string pi;
Classes - Métodos
Chama-se de sobrecarga de métodos
(overloading) o ato de criar diversos métodos
com o mesmo nome que se diferenciam pela
lista de argumentos (parâmetros)
MÓDULO 4
Palavras Reservadas
Operadores
Operadores Comuns Exemplo
• Incremento/Decréscimo ++ --
• Aritmético * / % + -
• Deslocamento << >>
• Relacional < > <= >=
• Igualdade == !=
• Condicional && || ! ?:
• Null-Coalescing ??
• Lógico &|^
• Atribuição = *= /= %= += -=
<<= >>= &= ^= |=
If
if (x > 10)
{
if (y > 20)
Console.WriteLine(“Comando 1”);
}
else
Console.WriteLine(“Comando 2”);
Identidade X igualdade
Identidade
É uma propriedade da localização do objeto
Testada pelo método System.Object.ReferenceEquals
Igualdade
É uma propriedade do valor do objeto
Testada pelo método System.Object.Equals
Cuidado!!!
Semântica do operador == depende do tipo associado
Identidade X igualdade
Exemplo
Object A, B, C, D;
A = "Uma string";
B = A;
C = "Uma string";
D = "Uma string diferente";
int n = 1;
while (n < 6)
{
Console.WriteLine(“Valor atual de n é {0}”, n);
n++;
}
Do
int n = 1;
do
{
Console.WriteLine(“Valor atual de n é {0}”, n);
n++;
}
while (n < 6);
For
Console.WriteLine(“{0} e {1}”,clientes[0].Nome,clientes[1].Nome);
Representação em memória:
Arrays jagged
Arrays irregulares, onde cada linha pode ter um
tamanho diferente
Cada elemento é um outro array
Exemplo de declaração:
int[][] arrayExemplo;
Exemplo de instanciação:
arrayExemplo = new int [2][];
arrayExemplo[0] = new int[3];
arrayExemplo[1] = new int[5];
ArrayLists
System.Collections.Generic
Mesma funcionalidade de ArrayList, mas é
typesafe (guardam um tipo pré-definido de
objetos)
int int
Add List<int>[i]
Exemplos
List<Tipo>
// Lista de inteiros
List<int> intList = new List<int>()
Varrer coleções
foreach (Customer c in customers.OrderBy("name"))
{
if (c.Orders.Count != 0) {
...
}
}
Laboratório
MÓDULO 5
Herança
Ao modelar um conjunto de classes, podemos
encontrar classes semelhantes na estrutura e no
comportamento
Solução 1: modelar as classes de forma independente
duplicação de código
Solução 2: extrair características estruturais e
comportamentais que sejam comuns e colocá-las em
classes mais gerais a partir das quais são definidas
classes mais específicas
herança
Herança
Telefone
TelefoneFixo TelefoneMovel
TelefoneMovelPrePago TelefoneMovelPosPago
Herança
ClasseBase obj;
obj = new ClasseDerivada();
Polimorfismo
Ocultando um método:
if (obj is MinhaClasse) {
MinhaClasse meuObjeto = (MinhaClasse)obj;
// utilizar o objeto convertido
}
Operadores is e as
MÓDULO 6
Aplicativos C#
Qualquer programa aplicativo em C# começa
sua execução pelo método Main()
Deve existir em uma única classe do assembly
Possíveis assinaturas:
public static void Main(String[] args){…}
public static void Main(){…}
public static int Main(){…}
Aplicativos Console
Exemplo Gera
String.Format("->{1,10}<-", "Hello"); -> Hello<-
MÓDULO 7
Aplicativos Windows
Application MeuForm
label1 Button
mainForm
button1 “OK”
Classe Application
class Program {
public static void Main() {
Form1 form = new Form1();
System.Windows.Forms.Application.Run(form);
}
}
Classe Form
public MyForm()
{
button1 = new Button();
button1.Text = "Click Me!";
button1.Location = new Point(10, 10);
this.Controls.Add(button1);
}
}
Controles
Propriedades importantes:
Anchor
Define uma distância constante entre o controle e uma
ou mais bordas do componente onde ele está contido
Valores Top, Bottom, Left, Right, None
Dock
Permite “amarrar” o controle a uma ou mais bordas do
componente onde ele está contido
Valores Top, Bottom, Left, Right, Fill, None
Demonstração
Semelhante ao ListBox
Para configurar o comportamento:
Propriedade DropDownSyle
Simple semelhante ao ListBox
DropDown permite a seleção e digitação de um valor
DropDownList permite a seleção mas não permite a
digitação de um valor
Demonstração
Fontes de dados
Representam os dados disponíveis para um
aplicativo
Camada de acesso a dados com base na API ADO.NET
Configuração via Data Source Configuration
Wizard
Cria automaticamente o conjunto de classes necessárias
para acesso aos dados
Três tipos diferentes de fontes
Banco de dados
Objetos com propriedades públicas
Web services
Componentes Acesso a Dados
DataSet tipado
É uma subclasse de DataSet que incorpora as
definições de esquema (tabelas e colunas) através
de propriedades públicas
Subclasse é criada através das informações de
esquema XML contidas em um XSD (XML Schema
Definition)
Pode ser criado automaticamente pelo Visual
Studio
Ao criar uma fonte de dados a partir de um banco de
dados, é criado um DataSet tipado automaticamente
Componentes Acesso a Dados
Componentes Acesso a Dados
TableAdapter
São objetos criados pelo Visual Studio que podem
ser entendidos como uma versão tipada do
DataAdapter
Permite
Executar comandos em um banco de dados
Preencher com dados um DataTable/DataSet
Método Fill(), método GetData()
Atualizar o banco de dados associado com as alterações
feitas em um DataTable
Componentes Acesso a Dados
Componentes Acesso a Dados
Componentes Acesso a Dados
Componentes Acesso a Dados
Exemplo de conjunto de classes criadas (tabela “Shippers” do
“Northwind”):
Uma classe derivada de DataSet
ShippersDataSet
Uma classe derivada de DataTable
ShippersDataTable
Uma classe derivada de DataRow
ShippersRow
Um TableAdapter
ShippersTableAdapter
Uma classe derivada de EventArgs
ShippersRowChangeEvent
Um delegate
ShippersRowChangeEventHandler
Exercícios
Data Binding
É chamado de vinculação de dados
Entende-se como a associação de uma fonte de dados com
um componente visual de interface gráfica
Dois tipos de vinculação:
Simples – permite que se anexe uma propriedade de um
controle/formulário a um único valor na fonte de dados
TextBox, Label, etc
Complexa – permite anexar um controle a uma lista de valores
ListBox, ComboBox, etc
Exercícios