Perplejo me he quedado haciendo unas pruebas tanto en Visual Basic .NET como en C# donde el siguiente codigo sacado de la propia MSDN no ha funcionado:
// try-finally
using System;
public class MainClass
{
static void Main()
{
int i = 123;
string s = "Some string";
object o = s;
try
{
// Invalid conversion; o contains a string not an int
i = (int)o;
}
finally
{
Console.Write("i = {0}", i);
}
}
}
Me salta la excepcion igualmente en vez de saltar al bloque finally. No se supone que ocurra la catastrofe que ocurra deberia ejecutar si o si el bloque finally? :shock:
Salu2...
Poner el finally no te exime de poner un catch para la excepción apropiada. A pesar de saltar la excepción, el finally se ejecuta. Si no has capturado la excepción, el programa hace un crash excelente, pero el finally se ejecuta sí o sí.
El ejemplo es un poco "minimalista". Uno más interesante:
using System;
public class MainClass
{
static void Do()
{
int i = 123;
string s = "Some string";
object o = s;
try
{
// Invalid conversion; o contains a string not an int
i = (int)o;
}
finally
{
Console.WriteLine( "i = {0}", i );
}
}
static void Main()
{
try
{
Do();
}
catch
{
Console.WriteLine( "El Do() la ha cagado" );
}
}
}
Citar
i = 123
El Do() la ha cagado
Hummm....
Cita de: "Warchief"El ejemplo es un poco "minimalista".
Es el que utiliza de ejemplo la MSDN en la entrada referida a la palabra clave "finally":
http://msdn2.microsoft.com/es-es/library/zwc8s4fz(VS.80).aspx
Acaba un compañero mio de hacer una prueba en Java y parece ser que si, que la excepcion no se anula, se escapa hacia afuera hasta dar con catch que la recoja para despues volver al finally del try que la genero, curioso :?
Gracias por la explicacion y el ejemplo,
Warchief.
Salu2...