Visual Studio 2005 :: Diferencias en tiempo de diseño de C# y VB 2005 en el uso de excepciones
Artículo :: Programación :: Visual Studio 2005
Diferencias en tiempo de diseño de C# y VB 2005 en el uso de excepciones
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 Sub End 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.
4 Responsesso far
En esta ocasión, he preparado un artículo en el que veremos algunas diferencias del uso
Solo un apunte: si en Visual Basic, en las configuraciones del proyecto, establecemos que las advertencias se traten como errores como por otro lado siempre es recomendable, optendremos el mismo comportamiento tanto en VB com en C#.
Tambien podemos modificar este comportamiento en la ficha Compile (supongo que será Compilar en español), de las propiedades del proyecto, estableciendo que en la condición Duplicate or overlaping cacth blocks (que en español será algo como Bloques cacth duplicados o superpuestos) establezcamos que queremos que se nos informe de un error.
Eso es. 🙂
Por defecto el comportamiento es el que comento. En C# lo marca como error (Error) y en VB 2005 como warning (Advertencia), pero se modifica tal y como apuntas (siempre se aprende algo jejeje).
Se despliega el combo y se selecciona Advertencia (por defecto en VB 2005), o Error (por defecto en C#) o ninguno (para nada recomendable).
Muchas gracias Rodrigo. :-))
Es muy buen hacer este tipo de trabajo de programacion me estoy interesando en conocer mas sobre el particular