lunes, 24 de agosto de 2009

uso de visual studio

En este artículo, vamos a ver algunas de las diferencias que encierra el entorno de desarrollo Visual Studio 2005 cuando se trabaja con excepciones en C# y en VB 2005.
Como ya sabemos, las excepciones se manejan con el uso de la palabra reservada Catch.
La manera en la que .NET utiliza Catch es similar al uso de las sentencias condicionales If. Si dentro de un conjunto anidado de sentencias Catch se maneja una excepción, el resto de instrucciones Catch no se ejecutan.
Por lo tanto, el código general del manejo de excepciones en un pequeño ejemplo de C# sería el siguiente:
public partial class Form1 : Form{ public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { MiMetodo(); } private void MiMetodo() { try { int valor; valor = 0; int divisor; divisor = 0; valor = valor / divisor; } catch (DivideByZeroException) { MessageBox.Show("División por cero"); } catch (Exception ex) { MessageBox.Show(ex.Message); } }}
El mismo código del ejemplo escrito en C# pero en VB 2005, sería el sigiuente:
Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click MiMetodo() End Sub Private Sub MiMetodo() Try Dim valor As Integer = 0 Dim divisor As Integer = 0 valor = valor / divisor Catch ex As OverflowException MessageBox.Show("División por cero") Catch ex As Exception MessageBox.Show(ex.Message) End Try End SubEnd Class
Cuando se produce una excepción, se preguntará por el primer Catch, y si se cumple, ya no se mirará otro Catch. Lo que se debe hacer, tal y como se indica en los ejemplos, es indicar las excepciones de manera que primero se gestione la excepción más concreta y precisa, y finalmente la excepción más general.
La particularidad viene cuando modificamos en el entorno de desarrollo de Visual Studio 2005 la gestión de las excepciones, posicionando el manejo de excepciones general, antes o por delante del manejo de la excepción concreta.
La parte de código escrito en C# correspondiente a la modificación en la gestión de excepciones quedaría de la siguiente manera:
...
catch (Exception ex){ MessageBox.Show(ex.Message);}catch (DivideByZeroException){ MessageBox.Show("División por cero");}...
El mismo código equivalente pero en VB 2005, sería el sigiuente:
...
Catch ex As Exception MessageBox.Show(ex.Message)Catch ex As OverflowException MessageBox.Show("División por cero")End Try...
Ahora bien, si utilizamos la modificación de código indicada anteriormente y acudimos al entorno de desarrollo, Visual Studio 2005 nos indicará un aviso para VB 2005 y un error para C#.
La consecuencia es clara, mientras que VB 2005 nos permite ejecutar el código, C# no.
Esto nos lleva a una segunda consecuencia, y es que en el caso de VB 2005, el código se ejecuta (el aviso no nos lo impide mientras que el error sí), y por lo tanto, la gestión de excepciones no se realiza de forma satisfactoria, así que si trabajais a menudo con excepciones... cuidado con el uso de las mismas.

No hay comentarios:

Publicar un comentario