Evet. catch
bloğunda bir Exception
olsa bile, finally
yürütülür. Eğer C++ aşina değilseniz
, sadece bir object
ait destructor
olarak finally
düşünüyorum. Nesne içinde bir ifade durumu ne olursa olsun, ~Destructor
yürütülür. Ancak finally
numaralı telefona return
'u ekleyemezsiniz [bazı derleyiciler izin versin].
aşağıdaki kodu bakınız: değiştirilmiştir nasıl küresel değişkeni
y
bakınız. Ayrıca bkz.
Exception1
,
Exception2
tarafından karşılanmıştır.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace finallyTest
{
class Program
{
static int y = 0;
static int testFinally()
{
int x = 0;
try
{
x = 1;
throw new Exception("Exception1");
x = 2;
return x;
}
catch (Exception e)
{
x = -1;
throw new Exception("Exception2", e);
}
finally
{
x = 3;
y = 1;
}
return x;
}
static void Main(string[] args)
{
try
{
Console.WriteLine(">>>>>" + testFinally());
}
catch (Exception e)
{ Console.WriteLine(">>>>>" + e.ToString()); }
Console.WriteLine(">>>>>" + y);
Console.ReadLine();
}
}
}
çıkışı: RAİ tanımı ile
>>>>>System.Exception: Exception2 ---> System.Exception: Exception1
at finallyTest.Program.testFinally() in \Projects\finallyTest\finallyTest\Program.cs:line 17
--- End of inner exception stack trace ---
at finallyTest.Program.testFinally() in \Projects\finallyTest\finallyTest\Program.cs:line 24
at finallyTest.Program.Main(String[] args) in \Projects\finallyTest\finallyTest\Program.cs:line 38
>>>>>1
İlk durum garip değil. İşte bu nihayetinde. Http://stackoverflow.com/questions/65035/in-java-does-return-trump-finally sayfasına bakın. – kennytm
Görüyorsunuz, 'return'' try/catch/finally' bloğunun kapsamının ötesine geçip yönteme başvurabilirim. Bunu yapmanın yanlış olduğunu söylemiyorum, ama beni koruyarak yakaladı. Sadece hiç dikkat etmediğim bir şey. Sanırım her zaman yöntemlerimi sonuna kadar taşıdım;) – lewiguez