Вы находитесь на странице: 1из 60

Linguagem de Programao I

Carlos Sulzer Pgo

Comentrios
Tipos:
nica linha:
//

Bloco: /* */ Documentao XML ///

Comentrios
/// <summary> Gravar erro no arquivo de Log. </summary> /// <return>mtodo sem retorno (void) </return> /// <param name="strMessage">Mensagem a ser gravada </param> /// <param name="objPagina">Pgina de referncia </param> public static void Log(string strMessage, System.Web.UI.Page objPagina) { string arquivo = ConfigurationManager.AppSettings["PathLog"]; string diretorio = ConfigurationManager.AppSettings["PathLog"]; diretorio = diretorio.Substring(0, diretorio.LastIndexOf("\\")); StreamWriter text = new StreamWriter(arquivo, true); text.Write("\r\n" + DateTime.Now.ToString("dd/MM/yyyy - HH:mm") + "\r\n" + strMessage + "\r\n"); text.Close(); ExibirMensagemErro.Exibir("ERRO INESPERADO.", objPagina.Page); }

Comentrios
Coloque o curso sobre o parmetro do mtodo e pressione : Ctrl+Shift+Espao para visualizar os comentrios.

Mostrando Linhas
No Visual Studio 2005, escolha no menu a seguinte opo para apresentar o nmero da linha referente ao cdigo implementado. Este recurso lhe ajudar na hora de identificar possveis erros no cdigo.

Tools Options Text Editor All Languages General Line Numbers

Region
Permite uma viso hierrquica e resumida de todo o cdigo. #region construtor da classe public MinhaClasse() { // implementao } #endregion

2X

Classe
O C# requer que toda a lgica de programao seja definida dentro de classes. Uma vez definida, a classe poder ser O nome do arquivo (.CS) no precisa chamada (instanciada) em qualquer lugar do programa. ser igual ao nome da classe Public class MinhaClasse { Public static int contador; Public void MinhaClasse() { contador++ } }
Classe: Sempre ser necessrio definir um tipo (classe)

Corpo da classe: Delimitado por { e } Variveis e mtodos devem estar dentro da classe

Classe
Define um tipo Unidade fundamental da POO Um conjunto de dados e mtodos (operaes sobre os dados) class Conta { ... }

Classe
Campos da instncia
Cada instncia tem uma cpia do campo (uma cpia dos dados) Tambm chamados variveis de instncia
class Conta { public double saldo; }

Objetos
Os objetos so instncias das classes criadas com o uso da palavra reservada new Conta corrente = new Conta(); Conta poupanca = new Conta();

saldo

corrente

Objetos
saldo
poupana

Objetos
So criados a partir das classes atravs do operador new Memria alocada para todas as variveis de instncia Um objeto tambm chamado instncia A criao de um objeto chamada instanciao ou ativao

Os membros dos objetos so acessados atravs do operador . (ponto)


Conta corrente = new Conta(); Conta poupanca = new Conta(); corrente.saldo = 0; Poupanca.saldo = 1000;

Mtodos
Os mtodos representam o comportamento da classe
Em C# no existem funes, pelo menos no ao p-da-letra, basta declar-las normalmente como sendo mtodos estticos da classe obrigatria. class Conta {

public double saldo = 0; public double Sacar(double valor) { this.saldo -= valor; return this.saldo; }

Mtodos
Como definir um mtodo Visibilidade (Public, Private, etc.) Tipo do mtodo (static) Tipo de retorno (void sem retorno) Nome do Mtodo (Exibir) Tipo de parametro do mtodo (string) Nome do parmetro do metodo (mens) Exemplo :

Public static void Exibir(string mens)

Mtodos
this: Referncia para o prprio objeto Usado na implementao de mtodos do objeto No de uso obrigatrio, salvo nas situaes onde h conflito de nomes public double Abrir(double saldo)

{
this.saldo = saldo; }

1X

Mtodos
Podem ser Exemplo: sobrecarregados:
Classe possui mais do que um mtodo com o mesmo { nome this.saldo -= valor;
return this.saldo; } Porm a lista de parmetros deve ser diferente public double Sacar(int valor) O compilador seleciona a verso correta baseado nos { this.saldo -= valor; tipos de parmetros passados return this.saldo; } public double Sacar(double valor)

Parmetros - ref
Passagem por referncia:
As alteraes realizadas sobre o parmetro no mtodo so mantidas usa-se as palavras-chave ref ou out

Public void ReferenciaRef() { int original = 10; Incrementar(ref original); }


static void Incrementar (ref int valorRef) { valorRef++; }

Parmetros - out
A diferena do out que o parmetro deve ser inicializado dentro do mtodo Public void ParametroOut() { int original = 10; AlterarValor(out original); } static void AlteraValor (out int valorOut) { valorOut = 1; }

2X

Parmetros Nmero varivel


Um mtodo C# pode receber um nmero varivel de parmetros

Usando...

public class Utilitarios { static void PreencherParametros() public static string VariosParametros(params string[] nomes) { { Utilitarios.VariosParametros string retorno = String.Empty; ( foreach (string nome in nomes) Ol", "Turma", "Estamos", { "aqui", "para", +nome; retorno = retorno+"aprender", "C#" ); } } return retorno; } }

Modificadores de Classe (Resumo)


Podem Ser : Abstract Sealed
Um mtodo abstrato s pode ser declarado em uma classes abstrata.
Um mtodo abstrato no pode conter implementao na classe base (pai). Um mtodo abstrato no pode ser instanciado diretamente. Os mtodos abstratos devem ser implementados na subclasse (herdada). Para implementar um mtodo abstrato na subclasse utiliza-se o Modificador de Membro override Classes sealed (seladas) no podem ser herdadas

Modificadores de Classe
No C#, os seguintes modificadores de classe podem ser usados :

Declarao Abstract

Definio Tira a capacidade da classe ser instanciada diretamente podendo apenas ser herdada para ser especificada Tira a capacidade da classe ser herdada, podendo ser somente instanciada. No comumente implementada.

sealed

3x

Classes Abstratas (abstract)


So classes que no podem ser instanciadas diretamente Auxiliam na definio de um contrato para as subclasses Podem ter um ou mais mtodos abstratos: Mtodos abstratos precisam ser implementados na subclasse Caso a subclasse no implemente um mtodo definido como abstrato na sua classe base, ocorrer um erro de compilao

2X

Classes Abstratas (abstract)


Na classe concreta,class Animal public abstract o mtodo abstrato deve ser definido com a { palavra-chave override, public abstract void indicando que estamos Exibir(System.Web.UI.Page objPagina); } sobrescrevendo o mtodo da classe base.

public class AnimalMarinho : Animal mtodo abstrato deve ser Um { implementado nas classes concretas (derivadas). public override void Exibir(System.Web.UI.Page objPagina) { No h corpo no mtodo abstrato. ExibirMensagemErro.Exibir("O peixe um caractere de ponto-eSomente nada no mar azul", objPagina.Page); vrgula. } }

2X

Classes Seladas (sealed)


So chamadas sealed classes So classes que no podem ser derivadas. Terminam a cadeia de herana. Correspondentes a classe final do Java. public sealed Usando... class DaquiNaoPassa

public void Mensagem() Public class Sub : DaquiNaoPassa { { ExibirMensagemErro.Exibir("Classe Selada)", objPagina.Page); } }

Modificadores de Membros

Dados definidos pela classe so chamados variveis membros, ou variveis de instncia

1X

Os modificadores de membros podem ser aplicveis a variveis membros, propriedades e mtodos, que so definidos como tipos. Declarao
abstract

Definio
Quando declarado um membro na classe pai, obriga o desenvolvedor a implementar o membro para a classe filha. Obs.: no suporta implementao na classe pai Indica que o mtodo ou assessor pode ser anulado por classes de herana. Obs.: suporta implementao na classe pai e no obriga a implementao na classe herdada. Este modificador aplicado em campos e variveis locais. A expresso constante avaliada no tempo de compilao; portanto, ele no pode conter referncias.

virtual

const

Modificadores de Membros
Declarao override Definio Usado para modificar um mtodo ou assessor que definido como virtual ou abstract em uma classe base herdada. A assinatura da prevalncia e o mtodo da base deve ser igual Um membro declarado com o modificador readonly s pode ser alterado durante a declarao ou no construtor da classe Os membros declarados como static pertencem classe e no a uma instncia da classe. Voc pode utilizar static com campos, mtodos, propriedades, operadores e at mesmo construtores. Anula a capacidade de herana do membro

readonly

static

sealed

Modificadores de Membros (Resumo)


Podem Ser :
abstract virtual const override readonly static sealed
Mtodos abstract virtual override static sealed Variveis const readonly static Propriedades static (desde que a varivel seja static)

Constantes, campos, mtodos, propriedades, indexadores, eventos, operadores e construtores

1X

Modificadores de Acesso

No C#, os seguintes modificadores de acesso podem ser usados para os membros de classe:
Declarao
Public Private (padro) Internal Protected protected internal Static (em mtodos)

Definio
Acesso ilimitado a partir de qualquer outra classe Acesso limitado somente classe que contm o membro Acesso limitado a qualquer outra classe que esteja no mesmo assembly (programa .exe / dll) Acesso limitado somente classe que contm o membro e s classes derivadas dela Acesso limitado classe que contm o membro, s classes derivadas dela, e s classes do mesmo assembly Indica que o mtodo est associado a nenhum objeto e chamado no contexto da classe com a syntaxe classe.metodo ao invez de objeto.metodo

Modificadores de Acesso
As seguintes regras se aplicam quando nenhum modificador de acesso especificado: Namespaces so sempre pblicos Classes so sempre publicas Membros da classe so sempre privados

Modificadores de Membro (Resumo)


Podem Mtodo Ser : public private internal protected Protected internal static Public internal Private Protected Protected Internal Static Varivel Public internal Private Protected Protected Internal Static (Public Static no aconselhvel) Propriedade Public Internal Private Protected Protected Internal Static (Public Static no aconselhvel - fica lento) Const Public Internal Private Protected Protected Internal Static (no)

Classe

Public internal Private - nao Protected - nao Protected Internal - nao Static (S pode conter membros estaticos)

Mtodo Static (Esttico)


A palavra static indica que o mtodo no est associado a nenhum objeto e chamado no contexto da classe com a sintaxe classe.mtodo em vez de objeto.mtodo Se no tivssemos declarado o mtodo como static, teramos que criar um objeto antes de usarmos o mtodo.

Mtodo Static (Esttico)


Exemplo:

Public static decimal soma(decimal n1, decimal n2) { result = n1 + n2; } Ver o mtodo ExibirMensagemErro.cs

Constantes
Campos ou variveis locais podem ser declarados como constantes usando a palavra-chave const, correspondente ao static final no Java Podem ser campos ou variveis locais de mtodos

Constantes no podem ter o seu valor alterado

1X

Constantes
class ExConstante { public const int dez = 10; }
Campos:
Inicializao somente na declarao

Somente-leitura (readonly)
Podemos definir campos somenteleitura atravs do modificador

readonly
Campos somente-leitura s podem ser inicializados:
Na declarao No construtor da classe

3X

Somente-leitura (readonly)
class ExSomenteLeitura { public readonly int dez = 10; } class ExSomenteLeitura { public readonly int dez; public ExSomenteLeitura() { dez = 10; Campos: } } Inicializao no mtodo construtor

Campos:

Inicializao na declarao

Somente-leitura (readonly)
A diferena bsica entre constantes (const) e somente-leitura (readonly) que campos somente-leitura podem assumir diferentes valores atravs do uso de diferentes construtores Readonly pode ser usado quando s podemos saber o valor do membro em tempo de execuo Qualquer tentativa de alterao em um campo do tipo readonly fora dos locais permitidos gera erro de compilao

Membros Static (Estticos)


Podem ser: Campos Mtodos Propriedades Pertencem classe (ao tipo) e no ao objeto (instncia)

No precisam que uma instncia seja criada para serem usados (new)
So inicializados antes mesmo que uma instncia da classe seja criada So compartilhados por todas as instncias da classe

1X

Membros Static (Estticos)


public class Pessoa { Usando... int TotalPessoas; public static private string nome; public Pessoa() Pessoa joao = new Pessoa(); { Pessoa maria = new Pessoa("Maria"); TotalPessoas++; } txtQtdPessoas.Text = "Quantidade de public Pessoa(string nome) : this() pessoas"+Convert.ToString( { Pessoa.TotalPessoas);
this.nome = nome; }

1X

Membros Static (Estticos)


public class Matematica { Usando... public static long Soma(int num1, int num2) { longreturn num1 + num2; resultado = }Matematica.Soma(10, 25); public static double Soma(float num1, float num2) { double resultado1 = return num1 + num2; Matematica.Soma(10.25, 25.33); } }

Construtores So mtodos especiais da classe que so executados no momento da ativao (instanciao) do objeto O construtor de uma classe deve ter as seguintes caractersticas:
Pblico No ter declarao do tipo de retorno Ter o mesmo nome da classe

Construtores public class Pessoa { private string nome;

// Mtodo Construtor public Pessoa() { nome = Sem Nome; }


}

1X

Construtores
Se o programador no define um obrigado a definir um O programador no construtor, o compilador mtodo construtor C# o faz: suas classes: para as public Pessoa() { } public class Pessoa

{ }

Este construtor chamado Construtor padro (default private string nome; constructor) Se ao menos um construtor definido (qualquer um), o construtor padro no criado pelo compilador!!!

Construtores Construtores podem ser sobrecarregados Chamamos outros construtores atravs da palavra-chave this
Esta chamada deve ser feita no cabealho do mtodo, no no seu corpo!

3X

Construtores
public class Ponto { private int x, y; public Ponto(int x, int y) { this.x = Construtor x; this.y = y; }

Sobrecarga
public Ponto() : this(0,0) { Construtor } }

1X

Construtores
public class Ponto { private int x, y; Chamada ao mtodo construtor sobrecarregado. public Ponto(int x, int y) { No no corpo do mtodo e sim no seu this.x = x; cabealho! this.y = y; } public Ponto() : this(0,0) {} }

Enumerao public enum TipoCliente { Bronze, Prata, Ouro }

Enumerao
Conjunto de valores constantes do tipo numrico Esses valores tm significado significativo para o cdigo Podem ser acessados atravs de um nome e no pelo seu valor propriamente dito
Cdigo fica mais fcil de ler e compreender Pode ser suportado pelo Intellisense (VS.NET) e tecnologias similares em outros editores Restringe os valores que podem ser recebidos por um determinado tipo

3X

Enumerao
public class Cliente {
Varivel do tipo enum: Atribuio: public uma varivel do tipo enum, o seu enum TipoCliente { Ao declarar
tipo o nome da emunerao Ao realizar Ouro Bronze, Prata, uma atribuio para uma varivel do tipo enum, devemos prefixar o valor com o } nome da enumerao:

Declarao:

public

Ex.: A declarao pode TipoCliente tipo; ser feita no corpo da classe TipoCliente.Bronze ou em um Namespace. No pode ser feita dentro de um mtodo!

public Cliente() { this.tipo = TipoCliente.Bronze; } }

1X

Enumerao Podemos alterar o tipo base da enumerao: public enum TipoCliente : byte { Bronze, Prata, Ouro }

1X

Enumeraes
Os valores atribudos a cada valor iniciam em 0 (zero)
Mas podemos forar valores especficos para cada enum enumerao: public item da TipoCliente : byte

{
public enum TipoCliente : byte Bronze, // 0 { Prata, // 1 Bronze = 1, Ouro // 2 Prata = 2, } Ouro = 3 }

Struct
Parecidas com classes
Suas instncias so do tipo valor, sendo, portanto, mais eficientes do que as classes
public struct Estrutura { public int Codigo; public string Nome; }

Struct
No podem ter construtor padro (sem parmetros), mais pode conter construtor com parmetros.
public struct Estrutura { public int Codigo; public string Nome; public Estrutura (int codigo, string nome) { this.Codigo = codigo; this.Nome = nome; }

Struct
Usando o struct
Estrutura[] structClientes = new Estrutura[10]; int linha = 0; for (int contador = 0; contador < structClientes.Length; contador++) { linha++; structClientes[contador].Codigo = linha; structClientes[contador].Nome = "NOME-"+ linha.ToString("000"); lbxStruct.Items.Add("Cdigo => " + structClientes[contador].Codigo); lbxStruct.Items.Add("Nome => " + structClientes[contador].Nome); lbxStruct.Items.Add(string.Empty); }

2X

Struct
No podem herdar de outras No podem ser classes bases de outras classes public struct Estrutura : ClasseBase { ... Estrutura uma Struct, } public SubClasse : Estrutura { ... }
Uma classe classesqualquer

esta construo no vlida

Struct
Internamente, as structs so definidas como classes sealed derivadas de

System.ValueType

Classes sealed so classes que no podem ser extendidas (no pode haver subclasses de classes sealed) Em geral, o uso de structs indicado quando:

A quantidade de dados contidos no tipo pequena (pontos, RGB, etc.) O tipo define poucos ou nenhum mtodo

Propriedades Mecanismo da CLR que permite habilitar controle de acesso aos membros da classe Propriedades podem ter mtodos para:
Atribuio (setters) Acesso (getters)

5X

Propriedades
public class Pessoa { private string nome;

Mtodo set executado!


Mtodo get:

Usando...

public string Nome { get { return this.nome; }

Pessoa joao = Joao.Nome = Joo da Silva;


Mtodo set:

Cdigo a ser executado quando a propriedade for lida. Deve retornar um valor do mesmo tipo da propriedade new (string no caso) Pessoa();

set Cdigo a ser executado quando a txtNome.text = joao.Nome;um valor atribudo a ela. A { propriedade tiver this.nome = value; } } }

varivel value automaticamente criada e tem escopo dentro do corpo do mtodo set

Mtodo get executado!

1x

Propriedades
Um dos mtodos (ou o get ou o set) pode no existir
public class Pessoa { private string nome; public string Nome { get { return this.nome; } } Propriedade somente-leitura

1x

Propriedades
Um dos mtodos (ou o get ou o set) pode no existir
public class Pessoa { private string nome; public string Nome { set { this.nome = value;} } }

Propriedade somente-escrita

Propriedades
Qualquer violao dos mecanismos de acesso s propriedades (tentativa de leitura de propriedade somente-escrita ou de escrita de propriedade somente-leitura) causar erro em tempo de compilao

Вам также может понравиться