Introducao ao C#
-
Upload
andre-teixeira-lopes -
Category
Technology
-
view
1.666 -
download
1
Transcript of Introducao ao C#
![Page 1: Introducao ao C#](https://reader034.fdocumentos.tips/reader034/viewer/2022052311/5584f2d6d8b42a78618b5101/html5/thumbnails/1.jpg)
Introdução a Linguagem
C Sharp
ECMA, Microsoft, C# 3.0,if,
Types, switch, Reference,
value, LINQ, delegate, ?:,
Boxing, bool, Overload,
POO, static, Genereics,
Nullable, object, void, struct, where, return,
dynamic, interface, partial,
Extension, string, as, is,
Anders, get, property,
sealed, internal, foreach,
ref, out, this, Constructor
(sc)2
1º Simpósio de Computação do Sul Capixaba
“Todas as áreas
computando novas idéias”
![Page 2: Introducao ao C#](https://reader034.fdocumentos.tips/reader034/viewer/2022052311/5584f2d6d8b42a78618b5101/html5/thumbnails/2.jpg)
Introdução a linguagem C#
H i s t ó r i c o
C a r a c t e r í s t i c a s
T i p o s
O p e r a d o r e s
E x p r e s s õ e s
O r i e n t a ç ã o a O b j e t o
C ó d i g o n ã o g e r e n c i a d o
C # 2 . 0
C # 3 . 0
C # 4 . 0
Tópicos
![Page 3: Introducao ao C#](https://reader034.fdocumentos.tips/reader034/viewer/2022052311/5584f2d6d8b42a78618b5101/html5/thumbnails/3.jpg)
Introdução a linguagem C#
Idealizada por Anders Hejlsberg
Um pouco de história
Anunciada em Junho de 2000
Desenvolvida para a .NET FCL
Não-Proprietária
Padronizada pela ECMA334
Nome (C#)
![Page 4: Introducao ao C#](https://reader034.fdocumentos.tips/reader034/viewer/2022052311/5584f2d6d8b42a78618b5101/html5/thumbnails/4.jpg)
Introdução a linguagem C#
Características
Orientada a objetos
Influenciada pelo C++ e Visual Basic
Tudo é um objeto
Independente de plataforma e Sistema Operacional
Fortemente tipada
Permite código não gerenciado
![Page 6: Introducao ao C#](https://reader034.fdocumentos.tips/reader034/viewer/2022052311/5584f2d6d8b42a78618b5101/html5/thumbnails/6.jpg)
Introdução a linguagem C#
Tipos
Tipos de Valor
Tipos de Referência
int i = 2011;
2011
string s = ‚C Sharp‛;
“C Sharp”;
Aceita null
![Page 7: Introducao ao C#](https://reader034.fdocumentos.tips/reader034/viewer/2022052311/5584f2d6d8b42a78618b5101/html5/thumbnails/7.jpg)
Introdução a linguagem C#
Tipos
Tipos de referência
Tipos de Valor
string -> string str = ‚Microsoft‛;
object -> object obj = ‚My object‛;
Inteiro
int i = -1024; (-231 até 231) uint u = 1024; (0 até 232)
Longo
long l = -100000; (-263 até 263) ulong u = 100000; (0 até 264)
![Page 8: Introducao ao C#](https://reader034.fdocumentos.tips/reader034/viewer/2022052311/5584f2d6d8b42a78618b5101/html5/thumbnails/8.jpg)
Introdução a linguagem C#
Tipos
Tipos de Valor
Byte
byte b = 200; (0 a 255) sbyte sb = 120; (-128 a 127)
Char
char c = ‘A’;
Ponto Flutuante
float f = 3.4F; (-3.4×1038 a 3.4×1038) decimal d = 1.57M; (-7.9x1028 a 7.9x1028) double l = 1E06; (±5.0×10−324 a ±1.7×10308)
![Page 9: Introducao ao C#](https://reader034.fdocumentos.tips/reader034/viewer/2022052311/5584f2d6d8b42a78618b5101/html5/thumbnails/9.jpg)
Introdução a linguagem C#
Tipos
Tipos de Valor
Booleano
bool b = true;
Enumerador
enum tipoPessoa {Fisica = 1, Juridica = 2};
Struct
struct Pessoa { string nome; int idade; tipoPessoa tipo; };
![Page 10: Introducao ao C#](https://reader034.fdocumentos.tips/reader034/viewer/2022052311/5584f2d6d8b42a78618b5101/html5/thumbnails/10.jpg)
Introdução a linguagem C#
Tipos
Arrays
Reference Type
int[] iArray = new int[1024];
int i = 2048;
iArray = new int[i];
string[,] NumerosIdiomas = new string[9, 2];
NumerosIdiomas[0, 0] = ‚Zero‛;
NumerosIdiomas[0, 1] = ‚Zero‛;
NumerosIdiomas[1, 0] = ‚Um‛;
NumerosIdiomas[1, 1] = ‚One‛;
![Page 11: Introducao ao C#](https://reader034.fdocumentos.tips/reader034/viewer/2022052311/5584f2d6d8b42a78618b5101/html5/thumbnails/11.jpg)
Introdução a linguagem C#
Tipos
O tipo string
Imutável
string s = ‚C‛;
s += ‚#‛;
s = ‚C++‛;
Memória
“C”
“C#”
“C++”
Formato
string.Format(‚Os valores são {0} e {1}‛,
valor1, valor2);
![Page 12: Introducao ao C#](https://reader034.fdocumentos.tips/reader034/viewer/2022052311/5584f2d6d8b42a78618b5101/html5/thumbnails/12.jpg)
Introdução a linguagem C#
Tipos
O tipo string
Formato
string.Format(‚{0:c}‛, 10); //R$ 10,00
string.Format(‚{0:c}‛, 10.2365); //R$ 10,23
string.Format(‚{0:n}‛, 10); //10,00
string.Format(‚{0:n}‛, 10.2365); //10,23
string.Format(‚{0:00.00}‛, 1.2); //01.20
string.Format(‚{0:#.##}‛, 1.2); //1.20
![Page 13: Introducao ao C#](https://reader034.fdocumentos.tips/reader034/viewer/2022052311/5584f2d6d8b42a78618b5101/html5/thumbnails/13.jpg)
Introdução a linguagem C#
Tipos
O tipo string
string str = ‚ECMA334‛;
int i = str.Length; //i = 7
bool b = str.Contains(‚3‛); //b = true
char c = str[3]; //c = ‘A’
i = str.IndexOf(‚33‛); //i = 4
str = str.Replace(‚ECMA‛,‛C#‛); //str = C#334
str = str.Remove(2); //str = C#
str = str.ToLower(); //str = c#
![Page 14: Introducao ao C#](https://reader034.fdocumentos.tips/reader034/viewer/2022052311/5584f2d6d8b42a78618b5101/html5/thumbnails/14.jpg)
Introdução a linguagem C#
Tipos
O tipo double para cálculos científicos
string s = (1.0 / 0).ToString();
s = (-1.0 / 0).ToString();
s = (0.0 / 0).ToString();
s = (1.0M / 0).ToString();
bool b = (0.0 / 0) == double.NaN;
b = double.IsNan((0.0 / 0));
b = (1.0 / 0) == double.PositiveInfinity
b = double.IsInfinity((1.0 / 0))
// +Infinito
// -Infinito
// NaN(Não é um número)
// Erro, decimal não //pode ser divido por 0
//b = false
//b = true
//b = true
//b = false
![Page 15: Introducao ao C#](https://reader034.fdocumentos.tips/reader034/viewer/2022052311/5584f2d6d8b42a78618b5101/html5/thumbnails/15.jpg)
Introdução a linguagem C#
Delegates
Ponteiro para funções
delegate double FazCalculo(double v1, double v2);
double Multiplica(double v1, double v2) { return v1*v2; }
double Subtrai(double v1, double v2) { return v1 - v2; }
![Page 16: Introducao ao C#](https://reader034.fdocumentos.tips/reader034/viewer/2022052311/5584f2d6d8b42a78618b5101/html5/thumbnails/16.jpg)
Introdução a linguagem C#
Delegates
void calcula(double v1, double v2) { FazCalculo calculo = Multiplica; double resultado = 0.0; resultado = calculo(1.1, 2.0); //resultado = 2.2; calculo = Subtrai; resultado = calculo (2.0,1.0); //resultado = 1.0; }
![Page 17: Introducao ao C#](https://reader034.fdocumentos.tips/reader034/viewer/2022052311/5584f2d6d8b42a78618b5101/html5/thumbnails/17.jpg)
Introdução a linguagem C#
Conversão entre tipos
Boxing
int i = (int)1.6; //i = 1 object o = 9.5; //o = 9.5
Unboxing
double d = (double)o; //d = 9.5
Operador as
object o = ‚abc‛ //o = ‚abc‛ string s = o as string; //s = ‚abc‛ o = 123; //o = 123 s = o as string; //s = null
![Page 18: Introducao ao C#](https://reader034.fdocumentos.tips/reader034/viewer/2022052311/5584f2d6d8b42a78618b5101/html5/thumbnails/18.jpg)
Introdução a linguagem C#
Adição
Operadores Aritméticos
int i = 0; //i = 0
i = 5 + 8; //i = 13
i += 5; //i = 18
Subtração
i++; //i = 19
++i; //i = 20
int j = 0; //j = 0
j = 3 - 5; //j = -2
j -= 5; //j = -7
j--; //j = -8
--j //j = -9
![Page 19: Introducao ao C#](https://reader034.fdocumentos.tips/reader034/viewer/2022052311/5584f2d6d8b42a78618b5101/html5/thumbnails/19.jpg)
Introdução a linguagem C#
Multiplicação
Operadores Aritméticos
double d = 2.6 * 1; //d = 2.6
d *= 2; //d = 5.2
Divisão
double d = 1.6 / 1; //d = 1.6
d /= 2; //d = 0.8
j -= 5; //j = -7
Resto
decimal d = 1.2M % 1; //d = 0.2
d %= 1; //d = 0.2
![Page 20: Introducao ao C#](https://reader034.fdocumentos.tips/reader034/viewer/2022052311/5584f2d6d8b42a78618b5101/html5/thumbnails/20.jpg)
Introdução a linguagem C#
Operadores Condicionais
==
!=
>= <=
is
> <
&&
||
?:
if(i is int) else if(i is double) else if(i is object)
bool IgualADez = (i == 10 ? true : false);
![Page 21: Introducao ao C#](https://reader034.fdocumentos.tips/reader034/viewer/2022052311/5584f2d6d8b42a78618b5101/html5/thumbnails/21.jpg)
Introdução a linguagem C#
Expressões
if
if(expressão1) { //Código } else if(expressão2) { //Código } else { //Código }
![Page 22: Introducao ao C#](https://reader034.fdocumentos.tips/reader034/viewer/2022052311/5584f2d6d8b42a78618b5101/html5/thumbnails/22.jpg)
Introdução a linguagem C#
Expressões
switch
switch(variável) { case valor1: { //código break; } case valor2: { //código return null; } default: { //código break; } }
![Page 23: Introducao ao C#](https://reader034.fdocumentos.tips/reader034/viewer/2022052311/5584f2d6d8b42a78618b5101/html5/thumbnails/23.jpg)
Introdução a linguagem C#
Expressões
while
while(condição) { //código }
do
do { //código } while(condição);
![Page 24: Introducao ao C#](https://reader034.fdocumentos.tips/reader034/viewer/2022052311/5584f2d6d8b42a78618b5101/html5/thumbnails/24.jpg)
Introdução a linguagem C#
Expressões
for
for(int i = 0; i > 150; i++) { //código if(i < 30) { continue; } break; }
foreach
foreach(int i in intArray) { //código }
![Page 25: Introducao ao C#](https://reader034.fdocumentos.tips/reader034/viewer/2022052311/5584f2d6d8b42a78618b5101/html5/thumbnails/25.jpg)
Introdução a linguagem C#
Namespaces
Forma de organização de classes
Toda classe pertencer a um, e somente um, namespace
namespace Entidades { public class Pessoa() { Pessoa() { } } public class Carro() { Carro() { } } }
using Entidades; namespace Funcoes { public class CriaPessoa() { Pessoa() { } public Pessoa Cria() { return new Pessoa(); } } }
![Page 26: Introducao ao C#](https://reader034.fdocumentos.tips/reader034/viewer/2022052311/5584f2d6d8b42a78618b5101/html5/thumbnails/26.jpg)
Introdução a linguagem C#
Orientação a Objeto
Classe
class Exemplo { Exemplo() { } ~Exemplo() {
} }
Objeto
Exemplo ex = new Exemplo();
![Page 27: Introducao ao C#](https://reader034.fdocumentos.tips/reader034/viewer/2022052311/5584f2d6d8b42a78618b5101/html5/thumbnails/27.jpg)
Introdução a linguagem C#
Orientação a Objeto
Herança Simples
Multiplos Contratos
interface IPessoa { string Nome; int Idade; }
interface ICliente { double Limite; }
![Page 28: Introducao ao C#](https://reader034.fdocumentos.tips/reader034/viewer/2022052311/5584f2d6d8b42a78618b5101/html5/thumbnails/28.jpg)
Introdução a linguagem C#
Orientação a Objeto
class BaseClass { BaseClass() { } }
class Cliente : BaseClass, IPessoa, ICliente { Cliente() { base.BaseClass(); } string Nome int idade; double Limite }
![Page 29: Introducao ao C#](https://reader034.fdocumentos.tips/reader034/viewer/2022052311/5584f2d6d8b42a78618b5101/html5/thumbnails/29.jpg)
Introdução a linguagem C#
Orientação a Objeto
Classe Abstrata
abstract class ClasseBase { }
Classes que não podem ser herdadas
sealed class ClasseFinal : ClasseBase { public ClasseFinal() { } }
![Page 30: Introducao ao C#](https://reader034.fdocumentos.tips/reader034/viewer/2022052311/5584f2d6d8b42a78618b5101/html5/thumbnails/30.jpg)
Introdução a linguagem C#
Orientação a Objeto
Polimorfismo
abstract class ClasseBase { public virtual string Nome() { return ‚ClasseBase‛; } }
sealed class ClasseFinal : ClasseBase { public ClasseFinal() { } public override string Nome() { return ‚ClasseFinal‛; } }
![Page 31: Introducao ao C#](https://reader034.fdocumentos.tips/reader034/viewer/2022052311/5584f2d6d8b42a78618b5101/html5/thumbnails/31.jpg)
Introdução a linguagem C#
Orientação a Objeto
O modificador new
abstract class ClasseBase { public string Nome() { return ‚ClasseBase‛; } }
sealed class ClasseFinal : ClasseBase { public ClasseFinal() { } public new string Nome() { return ‚‛; } }
![Page 32: Introducao ao C#](https://reader034.fdocumentos.tips/reader034/viewer/2022052311/5584f2d6d8b42a78618b5101/html5/thumbnails/32.jpg)
Introdução a linguagem C#
Orientação a Objeto
Sobrecarga (Overloading)
public class Pessoa { public Pessoa() { } public Pessoa(string pNome){ this.nome = pNome;} public Pessoa(string pNome, int pIdade):this(pNome){this.idade = pIdade;} private string nome; public string Nome { get{return nome;} set{nome = value;} } private int idade; public int idade; { get{return idade;} set{idade = value;} } }
![Page 33: Introducao ao C#](https://reader034.fdocumentos.tips/reader034/viewer/2022052311/5584f2d6d8b42a78618b5101/html5/thumbnails/33.jpg)
Introdução a linguagem C#
Orientação a Objeto
Sobrecarga de Operadores
class Vetor { int x, y; public Vetor(int x, int y) { this.x = x; this.y = y; } public static Vetor operator +(Vetor a, Vetor b) { return new Vetor(a.x + b.x, a.y + b.y); } }
![Page 34: Introducao ao C#](https://reader034.fdocumentos.tips/reader034/viewer/2022052311/5584f2d6d8b42a78618b5101/html5/thumbnails/34.jpg)
Introdução a linguagem C#
Orientação a Objeto
Sobrecarga de Operadores
Podem ser sobrecarregados
+ - ! == * / & % ^ > < >= <= ++ -- true false
Não podem ser sobrecarregados
sizeof new is as typeof && ||
![Page 35: Introducao ao C#](https://reader034.fdocumentos.tips/reader034/viewer/2022052311/5584f2d6d8b42a78618b5101/html5/thumbnails/35.jpg)
Introdução a linguagem C#
Orientação a Objeto
Métodos, funções e propriedades class Cliente { public Cliente() { } private decimal salario; public decimal Salario { get{return salario;} set { if(value >= 0) salario = value; } } public decimal Limite() { return salario * 0.5; } }
![Page 36: Introducao ao C#](https://reader034.fdocumentos.tips/reader034/viewer/2022052311/5584f2d6d8b42a78618b5101/html5/thumbnails/36.jpg)
Introdução a linguagem C#
Orientação a Objeto
Modificadores de acesso
private
public
internal
protected
protected internal
![Page 37: Introducao ao C#](https://reader034.fdocumentos.tips/reader034/viewer/2022052311/5584f2d6d8b42a78618b5101/html5/thumbnails/37.jpg)
Introdução a linguagem C#
Passagem de parâmetros
Value Types
Valor
Prefixo ref
Prefixo out
Reference Types
Referencia
Cuidado ao modificar membros de classe
![Page 38: Introducao ao C#](https://reader034.fdocumentos.tips/reader034/viewer/2022052311/5584f2d6d8b42a78618b5101/html5/thumbnails/38.jpg)
Introdução a linguagem C#
Passagem de parâmetros
internal void Incrementa(int i) { i++; }
internal void IncrementaOut(out int i) { i = 0; i++; }
internal void IncrementaRef(ref int i) { i++; }
![Page 39: Introducao ao C#](https://reader034.fdocumentos.tips/reader034/viewer/2022052311/5584f2d6d8b42a78618b5101/html5/thumbnails/39.jpg)
Introdução a linguagem C#
Passagem de parâmetros
internal void TestaIncremento() { int i; Incrementa(i); //Erro Compilação IncrementaRef(ref i); //Erro Compilação IncrementaOut(out i) //i = 1; i = 10; Incrementa(i); //i = 10 IncrementaRef(ref i); //i = 11 }
![Page 40: Introducao ao C#](https://reader034.fdocumentos.tips/reader034/viewer/2022052311/5584f2d6d8b42a78618b5101/html5/thumbnails/40.jpg)
Introdução a linguagem C#
Passagem de parâmetros
public class Pessoa { public Pessoa() { } public string PNome { get; set; } public Carro PCarro { get; set; } }
public class Carro { public Carro() { } public string Nome { get; set; } }
![Page 41: Introducao ao C#](https://reader034.fdocumentos.tips/reader034/viewer/2022052311/5584f2d6d8b42a78618b5101/html5/thumbnails/41.jpg)
Introdução a linguagem C#
Passagem de parâmetros
public void CriaPessoa() { Pessoa pessoa = new Pessoa(); pessoa.PNome = ‚Willian‛; AlteraNome(pessoa); //pessoa.PNome = ‚Willian Gates‛ AlteraCarro(pessoa.PCarro); //pessoa.PCarro = null }
public void AlteraNome(Pessoa P) { P.PNome += ‚ Gates‛; }
public void CriaCarro(Carro C) { C = new Carro(); C.Nome = ‚Vectra‛; }
![Page 42: Introducao ao C#](https://reader034.fdocumentos.tips/reader034/viewer/2022052311/5584f2d6d8b42a78618b5101/html5/thumbnails/42.jpg)
Introdução a linguagem C#
Membros estáticos e instanciáveis
Estático (static)
Classes globais
Evitar o uso
Não acessa membros não estáticos
Não estático
Padrão
Acessam membros estáticos
![Page 43: Introducao ao C#](https://reader034.fdocumentos.tips/reader034/viewer/2022052311/5584f2d6d8b42a78618b5101/html5/thumbnails/43.jpg)
Introdução a linguagem C#
Constantes VS Somente leitura
Constante (const)
Estático
Avaliado em tempo de compilação
Somente Leitura (readonly)
Não é estático
Avaliado em Runtime
Pode ser modificado no construtor da classe
![Page 44: Introducao ao C#](https://reader034.fdocumentos.tips/reader034/viewer/2022052311/5584f2d6d8b42a78618b5101/html5/thumbnails/44.jpg)
Introdução a linguagem C#
Constantes VS Somente leitura Constante
Somente Leitura
public class ExeConst { public const string ClassName = ‚ExeConst‛; public const double PISen = Math.Sin(Math.PI); //Erro public ExeConst() { } }
public class ExeReadOnly { public const string ClassName = string.Empty; public const double PISen = Math.Sin(Math.PI); public ExeConst() { ClassName = ‚ExeReadOnly‛; } }
![Page 45: Introducao ao C#](https://reader034.fdocumentos.tips/reader034/viewer/2022052311/5584f2d6d8b42a78618b5101/html5/thumbnails/45.jpg)
Unsafe Code
Código não gerenciado
Ponteiros
Por que usar ?
Aplicações em tempo real
Funções externas
Programas Monitoradores
Introdução a linguagem C#
![Page 46: Introducao ao C#](https://reader034.fdocumentos.tips/reader034/viewer/2022052311/5584f2d6d8b42a78618b5101/html5/thumbnails/46.jpg)
Unsafe Code
Vantagens
Desvantagens
Performance e Flexibilidade
Compatibilidade
Acesso direto a memória
Sintaxe mais complexa
Perigoso
Introdução a linguagem C#
![Page 47: Introducao ao C#](https://reader034.fdocumentos.tips/reader034/viewer/2022052311/5584f2d6d8b42a78618b5101/html5/thumbnails/47.jpg)
Unsafe Code
O método tem que ser unsafe ou ter um bloco demarcado com a
palavra unsafe
Introdução a linguagem C#
class unsafeExemplo { unsafe void VerificaEnderecoMemoria() { int* ptr; int vlr = 1024; //vlr = 1024 ptr = &vlr; //*ptr = 1024 string s = ptr->ToString();// s = ‚1024‛ int ptrVlr = (*ptr); //ptrVlr = 1024 (*ptr) = 2048; //vlr = 2048; ptrVlr = 1024 } }
![Page 48: Introducao ao C#](https://reader034.fdocumentos.tips/reader034/viewer/2022052311/5584f2d6d8b42a78618b5101/html5/thumbnails/48.jpg)
Unsafe Code
Introdução a linguagem C#
class unsafeExemplo { void VerificaEnderecoMemoria() { unsafe { int* ptr; int vlr = 1024; //vlr = 1024 ptr = &vlr; //ptr = 0x05cbe910 string s = ptr->ToString();// s = ‚1024‛ int ptrVlr = (*ptr); //ptrVlr = 1024 (*ptr) = 2048; //vlr = 2048; //ptrVlr = 1024 } } }
![Page 49: Introducao ao C#](https://reader034.fdocumentos.tips/reader034/viewer/2022052311/5584f2d6d8b42a78618b5101/html5/thumbnails/49.jpg)
C Sharp 2.0
Generics
Introdução a linguagem C#
Anonymous Methods
Partial Types
Nullable types
Modificadores de acesso em propriedades
![Page 51: Introducao ao C#](https://reader034.fdocumentos.tips/reader034/viewer/2022052311/5584f2d6d8b42a78618b5101/html5/thumbnails/51.jpg)
Sem Generics class Pilha { object[] Items; int index; public Pilha() { Items = new object[100]; index = -1; } public void Empilha(object o) { Items[++i] = o; } public object Desempilha() { return Items[i--]; } }
Introdução a linguagem C#
![Page 52: Introducao ao C#](https://reader034.fdocumentos.tips/reader034/viewer/2022052311/5584f2d6d8b42a78618b5101/html5/thumbnails/52.jpg)
Sem Generics
void PilhaSemGenerics() { Pilha p = new Pilha(); p.Empilha(1); p.Empilha(2); int v1 = (int)p.Desempilha(); //Unboxing necessário int v2 = (int)p.Desempilha(); //Unboxing necessário }
Introdução a linguagem C#
![Page 53: Introducao ao C#](https://reader034.fdocumentos.tips/reader034/viewer/2022052311/5584f2d6d8b42a78618b5101/html5/thumbnails/53.jpg)
Com Generics class Pilha<T> where T : struct { T [] Items; int index; public Pilha() { Items = new T[100]; index = -1; } public void Empilha(T o) { Items[++index] = o; } public T Desempilha() { return Items[index--]; } }
Introdução a linguagem C#
![Page 54: Introducao ao C#](https://reader034.fdocumentos.tips/reader034/viewer/2022052311/5584f2d6d8b42a78618b5101/html5/thumbnails/54.jpg)
Com Generics
Introdução a linguagem C#
void PilhaComGenerics() { Pilha<int> pInt = new Pilha()<int>; pInt.Empilha(1); pInt.Empilha(2); int v1 = pInt.Desempilha(); //Unboxing desnecessário int v2 = pInt.Desempilha(); //Unboxing desnecessário Pilha<decimal> pDecimal = new Pilha()<decimal>; pDecimal.Empilha(1.0M); pDecimal.Empilha(2.0M); decimal v1 = pDecimal.Desempilha();//Unboxing desnecessário decimal v2 = pDecimal.Desempilha();//Unboxing desnecessário }
![Page 55: Introducao ao C#](https://reader034.fdocumentos.tips/reader034/viewer/2022052311/5584f2d6d8b42a78618b5101/html5/thumbnails/55.jpg)
Métodos Anônimos
Introdução a linguagem C#
Usado onde delegates são esperados
Métodos “in line”
Acesso a variáveis locais
“Métodos dentro de métodos”
![Page 56: Introducao ao C#](https://reader034.fdocumentos.tips/reader034/viewer/2022052311/5584f2d6d8b42a78618b5101/html5/thumbnails/56.jpg)
Sem Métodos Anônimos delegate double FazCalculo(double v1, double v2);
double Multiplica(double v1, double v2)
{
return v1*v2;
}
double Subtrai(double v1, double v2)
{
return v1 - v2;
}
void calcula(double v1, double v2)
{
FazCalculo calculo = Multiplica;
double resultado = 0.0;
resultado = calculo(1.1, 2.0); //resultado = 2.2;
calculo = Subtrai;
resultado = calculo (2.0,1.0); //resultado = 1.0;
}
Introdução a linguagem C#
![Page 57: Introducao ao C#](https://reader034.fdocumentos.tips/reader034/viewer/2022052311/5584f2d6d8b42a78618b5101/html5/thumbnails/57.jpg)
Com Métodos Anônimos
Introdução a linguagem C#
delegate double FazCalculo(double v1, double v2);
void calcula(double v1, double v2)
{
FazCalculo calculo = delegate(double v1, double v2)
{
return v1 * v2;
};
double resultado = 0.0;
resultado = calculo(1.1, 2.0); //resultado = 2.2;
calculo = delegate(double v1, double v2)
{
return (v1 - v2) * resultado;
};
resultado = calculo (2.0,1.0); //resultado = 2.2;
}
![Page 58: Introducao ao C#](https://reader034.fdocumentos.tips/reader034/viewer/2022052311/5584f2d6d8b42a78618b5101/html5/thumbnails/58.jpg)
Partial Types
Introdução a linguagem C#
Permite dividir uma mesma entidade em arquivos diferentes
Classes
Structs
Interfaces
![Page 59: Introducao ao C#](https://reader034.fdocumentos.tips/reader034/viewer/2022052311/5584f2d6d8b42a78618b5101/html5/thumbnails/59.jpg)
Introdução a linguagem C#
Sem Partial Types public class Cliente { private Compra[] compras; private int index; public Cliente() { compras = new Compra[100]; index = 0; } public void RealizaCompra(Compra compra) { compras[index++] = compra; } public bool RealizouCompra(){return index > 0;} }
![Page 60: Introducao ao C#](https://reader034.fdocumentos.tips/reader034/viewer/2022052311/5584f2d6d8b42a78618b5101/html5/thumbnails/60.jpg)
Introdução a linguagem C#
Com Partial Types public partial class Cliente { private Compra[] compras; int index; public Cliente() { compras = new Compra[100]; index = 0; } }
public partial class Cliente { public void RealizaCompra(Compra compra) { compras[index ++] = compra; } public bool RealizouCompra(){return index > 0;} }
![Page 61: Introducao ao C#](https://reader034.fdocumentos.tips/reader034/viewer/2022052311/5584f2d6d8b42a78618b5101/html5/thumbnails/61.jpg)
Nullable types
Introdução a linguagem C#
Values Types
Valor null
int? i; i = null; i = 1; int j = i; //Erro int j = i.Value; //j= 1;
![Page 62: Introducao ao C#](https://reader034.fdocumentos.tips/reader034/viewer/2022052311/5584f2d6d8b42a78618b5101/html5/thumbnails/62.jpg)
Modificadores de acesso em propriedades
Introdução a linguagem C#
private string nome; public string Nome { private set { nome = value; } public get { return nome; } }
private int idade; public int Idade { internal set { idade = value; } public get { return idade; } }
![Page 63: Introducao ao C#](https://reader034.fdocumentos.tips/reader034/viewer/2022052311/5584f2d6d8b42a78618b5101/html5/thumbnails/63.jpg)
C Sharp 3.0
Tipos Implícitos (Implicitly typed local variables )
Introdução a linguagem C#
Métodos de Extensão (Extension Methods)
Tipos Anônimos (Anonymous types)
Linq
Inicializadores de Objetos (Object initializers)
![Page 64: Introducao ao C#](https://reader034.fdocumentos.tips/reader034/viewer/2022052311/5584f2d6d8b42a78618b5101/html5/thumbnails/64.jpg)
Tipo Implícitos
Introdução a linguagem C#
var i = 5; var s = "Hello"; i = s.Length; var d = 1.0; var numbers = new int[] {1, 2, 3}; i = numbers[1]; var pessoa = new Pessoa(); Pessoa.Nome = ‚Anders‛;
![Page 65: Introducao ao C#](https://reader034.fdocumentos.tips/reader034/viewer/2022052311/5584f2d6d8b42a78618b5101/html5/thumbnails/65.jpg)
Métodos de Extensão
Introdução a linguagem C#
public static int ConverterParaInteiro(this double dbl) { return (int)dbl; }
double dbl = 1.57; int i = (int)dbl; //i = 1; i = dbl.ConverterParaInteiro(); //i = 1;
![Page 66: Introducao ao C#](https://reader034.fdocumentos.tips/reader034/viewer/2022052311/5584f2d6d8b42a78618b5101/html5/thumbnails/66.jpg)
Tipos Anônimos
Introdução a linguagem C#
var p1 = new { Nome = ‚Vectra", Preco = 120000.0 }; var p2 = new { Nome = ‚Gol", Preco = 45000.0 }; p1 = p2; p1.Nome = ‚Corsa‛;
var contatos = new[] { new { Nome = "Cris Brown", Telefones = new[] { "206-555-0101", "425-882-8080" } }, new { Nome = "Bobs Burgers", Telefones = new[] { "650-555-0199" } } };
![Page 67: Introducao ao C#](https://reader034.fdocumentos.tips/reader034/viewer/2022052311/5584f2d6d8b42a78618b5101/html5/thumbnails/67.jpg)
Linq
Introdução a linguagem C#
Pessoa ObtemPessoa(Pessoa[] Pessoas, string Nome) { var pessoa = (from p in Pessoas where p.Nome = Nome select p).ToArray(); if(pessoa.Length == 0) return null; else return pessoa[0] as Pessoa; }
Pessoa[] pessoas = new Pessoa[10]; CarregaPessoas(pessoas); var pessoasEmOrdem = from p in pessoas orderby p.Nome select p;
![Page 68: Introducao ao C#](https://reader034.fdocumentos.tips/reader034/viewer/2022052311/5584f2d6d8b42a78618b5101/html5/thumbnails/68.jpg)
Inicializadores de Objetos
Introdução a linguagem C#
public class Pessoa { public Pessoa() { } public string PNome { get; set; } public int PIdade { get; set; } }
Pessoa p1 = new Pessoa(){PNome = ‚Ana‛, PIdade = 17 }; Pessoa p2 = new Pessoa(){PNome = ‚Caio‛, PIdade = 27};
![Page 69: Introducao ao C#](https://reader034.fdocumentos.tips/reader034/viewer/2022052311/5584f2d6d8b42a78618b5101/html5/thumbnails/69.jpg)
C Sharp 4.0
Tipos dinâmicos
Introdução a linguagem C#
Parâmetros Nomeados e Opcionais
![Page 70: Introducao ao C#](https://reader034.fdocumentos.tips/reader034/viewer/2022052311/5584f2d6d8b42a78618b5101/html5/thumbnails/70.jpg)
Tipos dinâmicos
Introdução a linguagem C#
Um objeto melhorado
Operações verificadas em runtime
object o = 0.0; o = ((double)o) + 2.0; //o = 2.0 o = ‛C Sharp 2.0‛; int i = (d as string).Length; o = new Pessoa(); (o as Pessoa).Nome = ‚Objeto‛;
![Page 71: Introducao ao C#](https://reader034.fdocumentos.tips/reader034/viewer/2022052311/5584f2d6d8b42a78618b5101/html5/thumbnails/71.jpg)
Tipos dinâmicos
Introdução a linguagem C#
var v = 1.0; v += 2.0 v = ‚C Sharp 4.0‛; //Erro, não pode converter //string para double int i = v.Length; //Erro v = new Pessoa(); //Erro v.Nome = ‚Tipo dinâmico‛; //Erro
![Page 72: Introducao ao C#](https://reader034.fdocumentos.tips/reader034/viewer/2022052311/5584f2d6d8b42a78618b5101/html5/thumbnails/72.jpg)
Tipos dinâmicos
Introdução a linguagem C#
dynamic d = 1.0; d += 2.0 d = ‚C Sharp 4.0‛; int i = d.Length; d = new Pessoa(); d.Nome = ‚Tipo dinâmico‛;
![Page 73: Introducao ao C#](https://reader034.fdocumentos.tips/reader034/viewer/2022052311/5584f2d6d8b42a78618b5101/html5/thumbnails/73.jpg)
Tipos dinâmicos
Introdução a linguagem C#
public dynamic exampleMethod(dynamic d) { // A dynamic local variable. dynamic local = "Local variable"; int two = 2; if (d is int) { return local; } else { return two; } }
![Page 74: Introducao ao C#](https://reader034.fdocumentos.tips/reader034/viewer/2022052311/5584f2d6d8b42a78618b5101/html5/thumbnails/74.jpg)
Parâmetros Nomeados e Opcionais
Introdução a linguagem C#
Finalmente
“Sobrecarga”
void VendeItem(ItemEntidade Item , double Quantidade) { {...} } void VendeItem(ItemEntidade Item) { VendeItem(Item, 1.0); } void VendeItem() { ItemEntidade Item = new ItemEntidade(); VendeItem(Item); //Vende uma unidade do item VendeItem(Item, 1.0); //Vende uma unidade do item VendeItem(Item, 2.0); //Vende duas unidades do item }
![Page 75: Introducao ao C#](https://reader034.fdocumentos.tips/reader034/viewer/2022052311/5584f2d6d8b42a78618b5101/html5/thumbnails/75.jpg)
Parâmetros Nomeados e Opcionais
Introdução a linguagem C#
void VendeItem(ItemEntidade Item , double Quantidade = 1.0) { {...} } void VendeItem() { ItemEntidade Item = new ItemEntidade(); VendeItem(Item); //Vende uma unidade do item VendeItem(Item, 1.0); //Vende uma unidade do item VendeItem(Item, 2.0); //Vende duas unidades do item }
![Page 76: Introducao ao C#](https://reader034.fdocumentos.tips/reader034/viewer/2022052311/5584f2d6d8b42a78618b5101/html5/thumbnails/76.jpg)
Parâmetros Nomeados e Opcionais
Introdução a linguagem C#
public void VendeItemIF(string Descricao, string UF, double Preco, double Quantidade = 1.0, double Desconto = 0.0, string Unidade = "UN") { {...} }
VendeItemIF("Visual Studio", "ES", 1200d);
VendeItemIF("Visual Studio", "ES", 1200d,Unidade:‚CX");
![Page 78: Introducao ao C#](https://reader034.fdocumentos.tips/reader034/viewer/2022052311/5584f2d6d8b42a78618b5101/html5/thumbnails/78.jpg)
Bibliografia
C# Language Specification 1.0
C# Language Specification 1.2
C# Language Specification 2.0
C# Language Specification 3.0
C# Language Specification 4.0
Introdução a linguagem C#