class Animal
{
public string get()
{
return "Animal";
}
public string set()
{
int i = 132;
string s = "abc";
object o = s;
try
{
i = (int)o;
return "ddd";
}
finally
{
Console.WriteLine("invalid-cast exception finally");
}
}
}
class Program
{
static void Main(string[] args)
{
Animal animal = new Animal();
try
{
animal.get();
animal.set();
//return;
}
catch (Exception e)
{
Console.WriteLine(e.Message);
return;
}
//Console.WriteLine("before finally");
finally
{
Console.WriteLine("finally");
int a = 10;
}
}
}
在set函数中,不论是否发生异常,或者直接return,finally语句块都将被执行。
而在Main函数中,如果没有catch到执行set时抛出的异常(注释掉Main函数中的catch块),程序将直接崩溃,虽然在最后也会执行finally,但这种执行将没有意义。
所以主函数需要一个囊括所有执行代码的try{}catch{}块