Escolar Documentos
Profissional Documentos
Cultura Documentos
NET
Introdução
A plataforma .NET
.NET FrameWork
Componentes de Software
Prática
O Hellow Universe
Inicialmente vamos construir o famoso Hello Universe. Este será contruído usando
apenas o .NET Framework.
A Microsoft adotou a mesma estratégia da Sun quando fez com que o .NET Framework
fosse gratuito como o Java. Você pode desenvolver com .NET usando apenas o bloco
de notas.
O Visual Studio é uma ferramenta que deve ser adquirida a parte. E engana-se quem
pensa que existe apenas ele para ser usado.
Para desenvolver com .NET você também pode usar:
using System;
class Hello
{
public static void Main(string[] args)
{
Console.WriteLine("Hello, Universe");
// interagindo com argumento passados por parâmetro,
// (imprimindo-os)
for (int arg = 0; arg < args.Length; arg++)
Console.WriteLine("Arg {0}: {1}", arg, args[arg]);
}
}
Dica
Configurando o compilador do C#
using System;
namespace TestesIniciais
{
class TesteInicial
{
static void Main(string[] args)
{
string strValor="";
int intValor1=0;
int intValor2=0;
int intResultado=0;
Namespaces e Using
O comando Using serve para organizarmos as classes usadas em uma estrutura
hierarquica. O uso correto de namespaces soluciona o problema de usarmos 2 classes
com o mesmo nome, mas de diferentes autores.
O Namespace System (usado acima) é o principal namespace do .NET. Nele
encontram-se classes para controle de segurança, criptografia, threads, etc.
Resumindo, ao criar classes estas serão colocadas em namespaces que serão
chamados utilizando a palavra using ou a assinatura completa da classe.
Uma referencia no C# consiste apenas em dizer onde está um executável. Não existe
dependência entre referências (um objeto não deixará de ser instanciado por estar
nesta ou naquela DLL. Basta ter namespaces bem definidos).
O Console
O objeto Console possuí os métodos Write e WriteLine para escrever em tela. A
diferença entre os dois é uma quebra de linha colocada pelo método WriteLine.
Já com os métodos ReadLine e Read a diferença está na quantidade de caracteres
que poderão ser digitadas. O método ReadLine recebe tudo que for digitado até que
seja pressionado ENTER e retorna esta string para ser armazenada. Enquanto o método
Read recebe apenas uma tecla retornando seu código ASCII.
O objeto Convert
Este tem por objetivo fazer a conversão de tipos no .NET.
A linguagem C#
Tipos no C#
Existem dois grandes conjuntos de tipos no C#: tipos de valor e tipos de referência.
A diferença entre eles consiste na forma como os dados são armazenados na
memória. Os tipos de valor são armazenados em uma área chamada de pilha (stack).
Enquanto os tipos por referência são armazenados em uma área chamada monte
(heap).
A pilha(stack) mantém a execução do programa, como o fluxo de trabalho em um
restaurante. O último pedido que entra deve ser o primeiro a sair. Desta forma, cada
bloco de código com suas variáveis vai para a pilha de execução. Ao término do
mesmo, a área de memória usada é limpa.
Já o monte(heap) armazena seus dados aleatóriamente. O acesso é feito conforme
solicitação, não em uma ordem determinada. Este é o espaço usado para
armazenamento dos objetos criados em memória.
Ao utilizar um dos tipos numéricos descritos acima, tenha em mente seu uso para
otimizar a memória usada por sua aplicação e também para garantir a integridade de
seus dados.
Por exemplo, ao criar uma classe chamada Cliente que vai manter a idade do cliente
a maioria dos programadores utilizaria um tipo int para isto. Quando poderia ser usado
um byte ou um short (pelo menos) e preferencialmente sem sinal (ushort ou ubyte) desta
forma, caso o usuário tentasse atribuir um valor negativo para a idade, o próprio
compilador retornaria erro.
Operadores lógicos e de atribuição mais usados
Abaixo estão os operadores mis usados no C#. Os operadores para operações bit-a-bit
não são citados neste manual.
Operadores de atribuição
Operador Finalidade
= Atribuir um valor para uma variável ou
objeto.
+= Identico a variável = variável + Valor
-= Identico a variável = variável + Valor
++ Idêntico a variável = variável + 1
-- Idêntico a variável = variável - 1
Operadores lógicos
Operador Finalidade
&& E
|| Ou
! Não
if
É o SE lógico.
Exemplos de uso:
sozinho
if ( [condição] )
comando / bloco (executado caso a condição seja verdadeira)
com else
if ( [condição] )
comando / bloco (executado caso a condição seja verdadeira)
else
comando / bloco (executado caso a condição seja falsa)
outros
if ( [condição] )
comando / bloco (executado caso a condição seja verdadeira)
else if ( [condição] )
comando / bloco (executados caso a condição seja verdadeira)
else
comando / bloco (executados caso as condições sejam falsas)
Prática
Crie o arquivo abaixo no bloco de notas e salve-o na pasta aula1\TesteIf com o nome
TesteIf.cs.
using System;
namespace TesteIf
{
/// <summary>
/// Teste do comando If.
/// </summary>
class TesteIf
{
/// <summary>
/// O método principal Main é o primeiro que será executado.
/// </summary>
[STAThread]
static void Main(string[] args)
{
string strValor="";
string strOperador="";
int intValor1=0;
int intValor2=0;
int intResultado=0;
if (strOperador == "+")
intResultado = intValor1 + intValor2;
else if (strOperador == "-")
intResultado = intValor1 - intValor2;
else if (strOperador == "*")
intResultado = intValor1 * intValor2;
else if (strOperador == "/")
intResultado = intValor1 / intValor2;
else
Console.WriteLine("Informe uma operação válida. O resultado
será" + "zerado.");
while
Usado para fazermos laços (repetição de código) condicionais.
Exemplos de uso:
for
Usado para fazermos laços (repetição de código) com um contador.
Exemplos de uso:
Prática
Usando o comando while e for.
using System;
namespace Comandos
{
/// <summary>
/// Teste dos comandos while e for.
/// </summary>
class Comandos
{
/// <summary>
/// O método principal Main é o primeiro que será executado.
/// </summary>
[STAThread]
static void Main(string[] args)
{
int intValor1 = 0;
int intResultado = 0;
while (!blnSair)
{
Console.Write("Digite um número:");
strValor = Console.ReadLine();
intValor1 = Convert.ToInt32(strValor);
intValor1.ToString() +
" = " + intResultado);
}
if (strValor == "s")
blnSair = true;
else
{
blnSair = false;
}
}
}
}
}
switch
Usado para testar múltiplos valores em uma variável.
Prática
using System;
namespace TesteSwitch
{
/// <summary>
/// Teste do comando switch.
/// </summary>
class TesteSwitch
{
/// <summary>
/// O método principal Main é o primeiro que será executado.
/// </summary>
[STAThread]
static void Main(string[] args)
{
string strValor="";
string strOperador="";
int intValor1=0;
int intValor2=0;
int intResultado=0;
foreach
Usado para fazermos laços (repetição de código) com em uma coleção/array de
objetos.
Prática
using System;
using System.Collections;
namespace TesteArrayList
{
/// <summary>
/// Teste do comando foreach e arrays.
/// </summary>
class TesteArray
{
/// <summary>
/// O método principal Main é o primeiro que será executado.
/// </summary>
[STAThread]
static void Main(string[] args)
{
ArrayList arrNomes = new ArrayList();
//string[] astrNomes = {"João","Mário","Cremildo"};
string[] astrNomes = new string[3];
arrNomes.Add("Mário");
arrNomes.Add("João");
arrNomes.Add("Cremildo");
astrNomes[0] = "João";
astrNomes[1] = "Mário";
astrNomes[2] = "Cremildo";
A WEB
ASP.NET
ASP ASP.NET
Interpretado Compilado/Interpretado
Tipificação Fraca Tipificação Forte
Dificuldade para usar componentes Componentes são utilizados facilmente
Prática
1. No Visual Studio, selecione <New Project>
2. Na lista à esquerda da janela que aparece, selecione <Visual C# Projects>
3. Na lista do lado direito, selecione <ASP.NET Web Application>
4. Indique o nome http://localhost/TesteASPNET
5. Será criado um novo projeto com o WebForm1.aspx selecionado.
6. Clique com o botão direto sobre o nome dete formulário no Solution Explorer e clique
em renomear.
7. Digite o nome TesteASPNET.aspx
8. Arraste para página o Controle Label da barra de ferramentas WebControls. Pressione
<F4> e digite o lblServer na propriedade ID.
9. Arraste para página o Controle Label da barra de ferramentas HTML. Pressione <F4> e
digite o lblClient1 na propriedade ID.
10. Arraste para página o Controle Label da barra de ferramentas HTML. Pressione <F4>
e digite o lblClient2 na propriedade ID e limpe a propriedade Text.
11. Reposicione o controle lblServer para que fique abaixo dos outros 2.
12. Arraste para página o Controle Text da barra de ferramentas WebControls. Pressione
<F4> e digite o txtValor1 na propriedade ID e limpe a propriedade Text.
13. Arraste para página o Controle Text da barra de ferramentas WebControls. Pressione
<F4> e digite o txtValor2 na propriedade ID e limpe a propriedade Text.
14. Arraste para página o Controle Button da barra de ferramentas WebControls.
Pressione <F4> e digite o btnResultado na propriedade ID e Resultado na propriedade
Text.
14. Clique na parte interna do controle lblClient1 e digite:
1o. Número:
15. Clique na parte interna do controle lblClient2 e digite:
2o. Número:
3.Recaptulando OO
Classe
Objeto
Um objeto é a instancia de uma classe criada para prover a funcionalidade
especificada em uma classe.
Normalmente se refere a algo existente no mundo real.
Encapsulamento
Ao criar uma classe você decidirá o que deve ou não ficar visível para quem vai utilizar
o objeto. Este recurso é chamado de encapsulamento. Ao "esconder" de quem vai
utilizar sua classe o "como fazer" você está encapsulando código e tornando mais fácil
a utilização de um determinado recurso computacional.
Organização
§
Veja a figura acima:
AoBater - Evento. Representa algo que será executado somente quando uma
determinada condição acontecer para o objeto.
EncherAirBags - Método. Ação executada.
Pratica
1. Crie uma nova aplicação tipo console com C#. Dê o nome de Calculadora.
2. Clique com o botão direito sobre a solução (1o. arquivo no solution explorer).
3. Clique na opção <Add> depois em <New project...>
4. Selecione Class Library e nomeie como Calcula.
5. Renomeie o arquivo Class1.cs para Calcula.cs e digite:
using System;
namespace Classes.Calcula
{
/// <summary>
/// Responsável pelos cálculos efetuados
/// </summary>
public class Calcula
{
/// <summary>
/// Construtor da Classe Calcula
/// </summary>
public Calcula()
{
}
/// <summary>
/// Executa a soma de dois valores</summary>
/// <param name="pdecValor1">
/// Primeiro Valor para ser calculado.
/// </param>
/// <param name="pdecValor2">
/// Segundo Valor para ser calculado.
/// </param>
/// <value>Resultado da soma</value>
public decimal Soma(decimal pdecValor1, decimal pdecValor2)
{
return pdecValor1 + pdecValor2 //ocorrerá um erro aqui (não
conserte // ainda!!!).
}
/// <summary>
/// Executa a subtração de dois valores</summary>
/// <param name="pdecValor1">
/// Primeiro Valor para ser calculado.
/// </param>
/// <param name="pdecValor2">
/// Segundo Valor para ser calculado.
/// </param>
/// <value>Resultado da subtração</value>
public decimal Subtrai(decimal pdecValor1, decimal pdecValor2)
{
return pdecValor1 + pdecValor2;
}
/// <summary>
/// Executa a multiplicação de dois valores</summary>
/// <param name="pdecValor1">
/// Primeiro Valor para ser calculado.
/// </param>
/// <param name="pdecValor2">
/// Segundo Valor para ser calculado.
/// </param>
/// <value>Resultado da multiplicação</value>
public decimal Multiplica(decimal pdecValor1, decimal pdecValor2)
{
return pdecValor1 * pdecValor2;
}
/// <summary>
/// Executa a divisão de dois valores</summary>
/// <param name="pdecValor1">
/// Primeiro Valor para ser calculado.
/// </param>
/// <param name="pdecValor2">
/// Segundo Valor para ser calculado.
/// </param>
/// <value>Resultado da divisão</value>
public decimal Divide(decimal pdecValor1, decimal pdecValor2)
{
return pdecValor1 / pdecValor2;
}
}
}
OBS.: Repare nos comentários XML (iniciados por /// barras). Tente supor o que fazem.
6. No projeto Calculadora, clique com o botão direito no projeto e depois em <Add> <Add
Class...>
7. Nomeie a classe como ConsoleApoio digite:
using System;
namespace ClasseInicio
{
/// <summary>
/// Summary description for Console.
/// </summary>
public class ConsoleApoio
{
public ConsoleApoio()
{
}
/// <summary>
/// Exibe uma mensagem na tela e aguarda digitação de um
valor</summary>
/// <param name="pstrMensagem">
/// Mensagem informativa do valor que será digitado
/// </param>
public decimal EntraValor(string pstrMensagem)
{
string strValor="";
Console.Write(pstrMensagem);
strValor = Console.ReadLine();
return Convert.ToDecimal(strValor);
}
/// <summary>
/// Exibe uma mensagem na tela e aguarda digitação de um
operador</summary>
/// <param name="pstrMensagem">
/// Mensagem informativa do valor que será digitado
/// </param>
public string EntraOperador(string pstrMensagem)
{
string strValor="";
Console.Write(pstrMensagem);
strValor = Console.ReadLine();
return strValor;
}
/// <summary>
/// Exibe uma mensagem na tela</summary>
/// <param name="pstrMensagem">
/// Mensagem que será exibida
/// </param>
public void Mensagem(string pstrMensagem)
{
Console.WriteLine(pstrMensagem);
}
/// <summary>
/// Aguarda que seja pressionada uma tecla</summary>
public void PressioneTecla()
{
Console.Write("Pressione qualquer tecla para continuar");
Console.Read();
}
}
}
// XMLsample.cs
// compile with: /doc:XMLDoc.xml
using System;
using Classes.Calculos;
namespace ClasseInicio
{
/// <summary>
/// Interface da calculadora
/// </summary>
class UI
{
/// <summary>
/// Método inicial executado automáticamente para uma aplicação console
/// </summary>
[STAThread]
static void Main(string[] args)
{
string strOperador="";
decimal decValor1=0;
decimal decValor2=0;
decimal decResultado=0;
if (strOperador== "+")
decResultado = objCalcula.Soma(decValor1, decValor2);
else if (strOperador == "-")
decResultado = objCalcula.Subtrai(decValor1, decValor2);
else if (strOperador == "*")
decResultado = objCalcula.Multiplica(decValor1, decValor2);
else if (strOperador == "/")
decResultado = objCalcula.Divide(decValor1, decValor2);
else
objApoio.Mensagem("Informe uma operação válida.");
objApoio.PressioneTecla();
}
}
}
10. Ao tentar executar você verá que serão apresentados erros de execução. Verifique a
que a ordem correta para corrigi-los é de baixo para cima. Verifique também o uso da
janela Output.
12. Vamos utilizar Eventos. Após a linha de declaração do namespace, dentro das
chaves, digite a linha:
/// <summary>
/// Verifica qual operação poderá ser executada dependendo do parâmetro
/// informado.</summary>
/// <param name="pstrOperacao">
/// String que representa a operação qeu será executada ( +,-,* ou /).
/// </param>
/// <param name="pdecValor1">
/// Primeiro Valor para ser calculado.
/// </param>
/// <param name="pdecValor2">
/// Segundo Valor para ser calculado.
/// </param>
public decimal ExecutaOperacao(string pstrOperacao, decimal pdecValor1,
decimal pdecValor2)
{
decimal decResultado=0;
bool blnValido=true;
if (pstrOperacao== "+")
decResultado = this.Soma(pdecValor1, pdecValor2);
else if (pstrOperacao == "-")
decResultado = this.Subtrai(pdecValor1, pdecValor2);
else if (pstrOperacao == "*")
decResultado = this.Multiplica(pdecValor1, pdecValor2);
else if (pstrOperacao == "/")
decResultado = this.Divide(pdecValor1, pdecValor2);
else
blnValido=false;
if (blnValido)
this.OnMessage("O resultado eh:" + decResultado);
else
this.OnMessage("Informe uma operação válida.");
return decResultado;
}
//XMLsample.cs
// compile with: /doc:XMLDoc.xml
using System;
using Classes.Calculos;
namespace ClasseInicio
{
/// <summary>
/// Interface da calculadora
/// </summary>
class UI
{
/// <summary>
/// Método inicial executado automáticamente para uma aplicação console
/// </summary>
[STAThread]
static void Main(string[] args)
{
string strOperador="";
decimal decValor1=0;
decimal decValor2=0;
objCalcula.ExecutaOperacao(strOperador,decValor1,decValor2);
// if (strOperador== "+")
// decResultado = objCalcula.Soma(decValor1, decValor2);
// else if (strOperador == "-")
// decResultado = objCalcula.Subtrai(decValor1, decValor2);
// else if (strOperador == "*")
// decResultado = objCalcula.Multiplica(decValor1, decValor2);
// else if (strOperador == "/")
// decResultado = objCalcula.Divide(decValor1, decValor2);
// else
// objApoio.Mensagem("Informe uma operação válida.");
//
// objApoio.Mensagem("O resultado eh:" + decResultado);
objApoio.PressioneTecla();
No exemplo acima, OnMessage é um evento que ao ser acionado, foi "ligado" a rotina
Message para que exiba a mensagem correspondente.
4. Tente faze-la funcionar utilizando o código já criado (lembre-se que devemos adicionar
a referência e depois o namespace).
Herança
1) a herança só deve ser usada quando você tem o relacionamento “é um” entre as
classes. Por exemplo, gato “é um” animal. Porém, cachorro não é um gato!
Parece piada, mas algumas vezes “erros” deste tipo são cometidos por descuido ou
porque o desenvolvedor queria obter apenas uma determinada funcionalidade que a
classe gato continha.
2) para usar herança, a classe deve ter sido desenhada tendo em mente a herança. Isto
é muito importante pois se o objeto não foi construído desta forma a herença pode não
funcionar conforme o esperado.
OBS.: Muitas vezes usa-se herança onde poderia-se ter usado simplesmente uma
agregação (uma classe dentro de outra).
Pratica
1. Abra o solution usado no último exercício.
2. Modifique o projeto Calcula. Abrindo a classe Calcula e modificando:
/// <summary>
/// Verifica qual operação poderá ser executada dependendo do
/// parâmetro informado.</summary>
/// <param name="pstrOperacao">
/// String que representa a operação qeu será executada ( +,-,* ou /).
/// </param>
/// <param name="pdecValor1">
/// Primeiro Valor para ser calculado.
/// </param>
/// <param name="pdecValor2">
/// Segundo Valor para ser calculado.
/// </param>
/// <value>Resultado da operação</value>
public virtual decimal ExecutaOperacao(string pstrOperacao, decimal
pdecValor1
,decimal pdecValor2)
{
decimal decResultado=0;
bool blnValido=true;
if (pstrOperacao== "+")
decResultado = this.Soma(pdecValor1, pdecValor2);
else if (pstrOperacao == "-")
decResultado = this.Subtrai(pdecValor1, pdecValor2);
else if (pstrOperacao == "*")
decResultado = this.Multiplica(pdecValor1, pdecValor2);
else if (pstrOperacao == "/")
decResultado = this.Divide(pdecValor1, pdecValor2);
else
blnValido=false;
if (blnValido)
this.DisparaEvento("O resultado eh:" + decResultado);
else
this.DisparaEvento("Informe uma operação válida.");
return decResultado;
}
/// <summary>
/// Dispara o evento que retorna a mensagem para o objeto que o está
usando.
/// </summary>
/// <param name="pstrMensagem">
/// String que representa a Mensagem que será retornada.
/// </param>
public void DisparaEvento(string pstrMessage)
{
this.OnMessage(pstrMessage);
}
13. Agora, adicione um novo projeto de um classlibrary em C#
14. Renomeie o arquivo Class1.cs para CalculaEX.cs
15. Digite o código abaixo:
using System;
namespace Classes.Calculos
{
/// <summary>
/// Responsável por novos calculos
/// </summary>
public class CalculaEX: Calcula
{
public CalculaEX()
{
}
/// <summary>
/// Verifica qual operação poderá ser executada dependendo do parâmetro
/// informado.</summary>
/// <param name="pstrOperacao">
/// String que representa a operação qeu será executada ( +,-,* ou /).
/// </param>
/// <param name="pdecValor1">
/// Primeiro Valor para ser calculado.
/// </param>
/// <param name="pdecValor2">
/// Segundo Valor para ser calculado.
/// </param>
public decimal Raiz(decimal pdecValor1)
{
return (decimal) Math.Sqrt(Convert.ToDouble(pdecValor1));
}
/// <summary>
/// Verifica qual operação poderá ser executada dependendo do parâmetro
/// informado.</summary>
/// <param name="pstrOperacao">
/// String que representa a operação qeu será executada ( +,-,* ou /).
/// </param>
/// <param name="pdecValor1">
/// Primeiro Valor para ser calculado.
/// </param>
/// <param name="pdecValor2">
/// Segundo Valor para ser calculado.
/// </param>
public decimal Potencia(decimal pdecValor1, decimal pdecValor2)
{
return (decimal)
Math.Pow(Convert.ToDouble(pdecValor1),
Convert.ToDouble(pdecValor2));
}
/// <summary>
/// Verifica qual operação poderá ser executada dependendo do parâmetro
/// informado.</summary>
/// <param name="pstrOperacao">
/// String que representa a operação qeu será executada ( +,-,* ou /). Permite
também /// Raiz e Potencia.
/// </param>
/// <param name="pdecValor1">
/// Primeiro Valor para ser calculado.
/// </param>
/// <param name="pdecValor2">
/// Segundo Valor para ser calculado.
/// </param>
/// <value>Resultado da operação</value>
public override decimal ExecutaOperacao(string pstrOperacao, decimal
pdecValor1
, decimal pdecValor2)
{
decimal decResultado=0;
bool blnValido=true;
bool blnPai =false;
if (pstrOperacao == "P")
decResultado = this.Raiz(pdecValor1);
else if (pstrOperacao == "P")
decResultado = this.Potencia(pdecValor1, pdecValor2);
else if (pstrOperacao == "+" || pstrOperacao == "-" || pstrOperacao ==
"*"
|| pstrOperacao == "/")
{
base.ExecutaOperacao(pstrOperacao, pdecValor1,
pdecValor2);
blnPai=true;
}
else
blnValido=false;
if (!blnPai)
{
if (blnValido)
base.DisparaEvento("O resultado eh:" + decResultado);
else
base.DisparaEvento("Informe uma operação válida.");
}
return decResultado;
}
}
}
Muito bem, suponde que tudo correu bem. Vamos fazer com que o projeto da calculadora
funcione como esperado no ASP.NET também.
Abra a solution da calculadora e adicione os dois novos botões na página
Calculadora.aspx.
O polimorfismo permite que você tenha uma classe vão assumir diferentes ações
dependendo do objeto que a implementa. Além dos muito conhecidos métodos
polimórficos.
Prática
A prática será vista apenas nas próximas aulas.
Parte 3
Tratamento de Exceções
No C#
O tratamento de exceções normalmente é abordado ao fim da maioria dos
livros especializados. Porém (talvés por este motivo) muitos se esquecem da
importância de tratar exceções no mundo orientado para objetos. Alguns nem sabem
como faze-lo.
Para tratar exceções no C# são usados blocos estruturados de código. Usando
as palavras try..... catch e finally.
Try..Catch
Suponha que você queira que seu código continue funcionando normalmente
ao acontecer determinado erro. Para isto, basta trata-lo da maneira correta. Após a
palavra try colocamos o código onde pode ocorrer um determinado tipo de erro. O
comando catch obtém o erro caso este ocorra.
Prática
No Console
1. Vamos acertar o código que você utilizou para teste do comando switch:
using System;
namespace TesteSwitch
{
/// <summary>
/// Teste do comando switch.
/// </summary>
class TesteSwitch
{
/// <summary>
/// O método principal Main é o primeiro que será executado.
/// </summary>
[STAThread]
static void Main(string[] args)
{
string strValor="";
string strOperador="";
int intValor1=0;
int intValor2=0;
int intResultado=0;
try
{
switch (strOperador == "+")
{
case "+":
intResultado = intValor1 + intValor2;
break;
case "-":
intResultado = intValor1 - intValor2;
break;
case "*":
intResultado = intValor1 * intValor2;
break;
case "/":
intResultado = intValor1 / intValor2;
break;
default:
Console.WriteLine("Informe uma operação válida." +
"O resultado será zerado.");
break;
}
}
catch(DivideByZeroException dex)
{
Console.WriteLine("Não é possível dividir por zero!");
}
catch(Exception ex)
{
throw ex;
}
No ASP.NET
/// <summary>
/// Executa a divisão de dois valores</summary>
/// <param name="pdecValor1">
/// Primeiro Valor para ser calculado.
/// </param>
/// <param name="pdecValor2">
/// Segundo Valor para ser calculado.
/// </param>
/// <value>Resultado da divisão</value>
public decimal Divide(decimal pdecValor1, decimal pdecValor2)
{
try
{
return pdecValor1 / pdecValor2;
}
catch(DivideByZeroException dex)
{
throw new DivideByZeroException("Divisão por zero. " +
"Informe o valor correto!",
dex);
}
catch(Exception ex)
{
throw ex;
}
}
/// <summary>
/// Verifica qual operação poderá ser executada dependendo do parâmetro
/// informado.</summary>
/// <param name="pstrOperacao">
/// String que representa a operação qeu será executada ( +,-,* ou /).
/// </param>
/// <param name="pdecValor1">
/// Primeiro Valor para ser calculado.
/// </param>
/// <param name="pdecValor2">
/// Segundo Valor para ser calculado.
/// </param>
/// <value>Resultado da operação</value>
public virtual decimal ExecutaOperacao(string pstrOperacao, decimal
pdecValor1
, decimal pdecValor2)
{
decimal decResultado=0;
bool blnValido=true;
try
{
if (pstrOperacao== "+")
decResultado = this.Soma(pdecValor1, pdecValor2);
else if (pstrOperacao == "-")
decResultado = this.Subtrai(pdecValor1, pdecValor2);
else if (pstrOperacao == "*")
decResultado = this.Multiplica(pdecValor1, pdecValor2);
else if (pstrOperacao == "/")
decResultado = this.Divide(pdecValor1, pdecValor2);
else
blnValido=false;
if (blnValido)
this.DisparaEvento("O resultado eh:" + decResultado);
else
this.DisparaEvento("Informe uma operação válida.");
}
catch(DivideByZeroException dex)
{
this.DisparaEvento(dex.Message);
}
catch(Exception ex)
{
throw ex;
}
return decResultado;
}
4. Faça testes.