1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Excepções em Csharp

Discussão em 'Web Development' iniciada por andrepadez, 14 de Abril de 2008. (Respostas: 12; Visualizações: 723)

  1. andrepadez

    andrepadez Power Member

    Boas pessoal,
    o 1º post no fórum é logo com uma dúvida.

    Estou a aprender a programar com objectos e se fosse com ifs resolvia isto na boa.
    Tenho uma classe "Ponto". no programa principal, criei um array global de Pontos, com tamanho 5(por exemplo).

    No form principal, tenho uma NumericUpDown que permite ao utilizador seleccionar de 1 a 5(no array 0-4) e um botão que "cria" uma instância de ponto no índice seleccionado.

    Alguma sugestão para o programa não deixar criar e avisar o utilizador caso o ponto de índice escolhido pelo utilizador já esteja criado??
    E já agora, se eu puser uma caixa de texto e o utilizador exceder o limite de índice ou colocar letras por exemplo.

    Lembrem-se que o meu objectivo não é martelar ou resolver a situação, mas sim perceber como tratar uma classe no paradigma OOP.

    Muchas Gracias

    André
     
  2. XpiritO

    XpiritO Power Member

    O "throw/catch/try/finally" não resolvem o problema?
     
  3. andrepadez

    andrepadez Power Member

    Boas Xpirito,

    realmente penso que deve ser com essas funções que vou conseguir.
    O problema é que ainda não consegui encontrar informação suficientemente detalhada sobre como as usar.
    Podes dar-me um exemplo?

    e onde eu coloco o throw catch???


    Thanx
     
  4. XpiritO

    XpiritO Power Member

    Bom, o sistema de "excepções" não se enquadra especificamente com o webdesign... é usado em praticamente todas as linguagens de programação modernas, desde o Java ao C++ (e todas as linguagens compatíveis com a plataforma .NET), entre outros. O intuito é interromper a execução de uma aplicação de forma controlada pelo programador, lançando e capturando excepções de forma "user-friendly". Isso permite na maioria das vezes efectuar acções em função do tipo de excepção gerada pela aplicação e/ou informar o utilizador acerca do erro gerado e possíveis causas/soluções.

    Basicamente, e explicado de forma muito simples, podes consultar informação aqui:
    http://msdn2.microsoft.com/en-us/library/dszsf989(VS.71).aspx
    http://pt.wikipedia.org/wiki/Tratamento_de_exceção
    http://www.dotnet.com.pt/default.as...y&url=try-catch-finally\try-catch-finally.htm
    (todos estes artigos abordam o mecanismo de excepções especificamente em C#)
     
  5. andrepadez

    andrepadez Power Member

    Muito obrigado.
    Vou ler e aprender, hehe.

    Thanx.

    Após isto hei de ter umas questões mais complicadas sobre um programa que escrevi imperativamente e queria passar para objectos, mas por agora tá-se.
     
  6. joao.miguel

    joao.miguel Power Member

    Nada mais simples que isto

    try
    {
    //O teu código aqui
    }
    catch(Exception ex)
    {
    //trata a excepção
    }
    finally
    {
    }
     
  7. andrepadez

    andrepadez Power Member

    Desculpa chatear, ainda em relação ao problema anterior.
    O try catch funciona para a segunda parte da validação, mas a primeira não estou a ver como possa fazer sentido.
    Vou explicar:

    ao correr o prog., este cria um array de Ponto [5];
    ao clickar no botão "Criar Ponto" é criado um ponto no array, com o indice definido pelo user.
    Se o user tentar criar mais um ponto no mesmo índice, o programa substitui o original com o novo, eu queria que aparecesse uma mensagem a dizer que o ponto já existe.

    Como é que consigo obter essa informação???

    Mais uma vez obrigado
     
  8. |pr3t3nd3r|

    |pr3t3nd3r| Power Member

    penso que seja assim

    if(ponto[<variavel do indice que o utilizador definiu>].lenght>0)
    messagebox.show("ja exite valores neste campo");


    pode estar alguma coisa mal escrita, nao tenho aqui o c# express para testar, mas na teoria será assim,
    depois podes fazer else e afins...
     
  9. andrepadez

    andrepadez Power Member

    Ok, muito obrigado pr3t3nd3r.
    Não sabia que poderia aplicar o método Length assim, grazie mille.

    Quanto ao teu nick, se ele se refere a uma série de televisão do qual sou fã incondicional, Jarod, se quiseres tenho todos os episódios das quatro temporadas mais uns especiais nuns dvds. PM

    Abraço
     
  10. andrepadez

    andrepadez Power Member

    Ok, para fechar este thread, que peço desde já desculpa por ter colocado no local errado, a partir de agora uso Programação para este tipo de dúvidas:

    Experimentei com o Length, mas logo que percebi que não era o que procurava, pois a criação de instâncias pelo user não é sequencial; este pode escolher criar o ponto 3 depois o 1, logo a seguir o 5, etc, enquanto os outros índices do array estão null.

    Felizmente, ao teclar percebi num instante a solução, obrigado:

    Dentro da classe crio:

    - atributo:
    Código:
    private boolean existe;
    - no método construtor altero para:

    Código:
     
    public Ponto(int x, int y)
    {
    this.x = x;
    this.y = y;
    this.existe = true;
    }
    
    - e finalmente o seguinte método:

    Código:
     
    Public boolean Existe;
    {
        get { return existe;}
        set { this.existe = value; }
    }
    
    Assim, quando no programa principal quiser criar um botão ele só o faz...

    Código:
     
    if ponto[índice].Existe
        MessageBox.Show("Ponto <índice> já existe");
    else
        ponto[índice] = new Ponto (x,y);
    

    Espero que isto acabe por ajudar alguém para além de mim.
    Obrigado a todos, vou sem dúvida começar a frequentar este fórum.
     
  11. andrepadez

    andrepadez Power Member

    Ok, continua sem dar pela seguinte razão:

    Quando um objecto não existe, não se consegue aceder aos seus métodos (duhhh).
    Para isso usei um try catch para lidar com as excepções e ficou perfect.

    Sayonara
     
  12. SoundSurfer

    SoundSurfer Power Member

    if ponto[índice] != null
     
  13. andrepadez

    andrepadez Power Member

    Lol, como é que eu não pensei nisso????

    thx
     

Partilhar esta Página