DOBON.NET DOBON.NETプログラミング掲示板過去ログ

セクション全体を包むような例外について

環境/言語:[VisualBasic.NET]
分類:[.NET]

[OS]Windows2000
[言語]VisualBasic.NET 2003

こんにちは。
セクション内の処理ステップ毎にTry〜Catch〜ではなく、
セクション全体を包み込むような機能は実現できるのでしょうか?

ネット上で調べた際、それらしきjava構文は見かけたのですが
vb.netでも可能かが現時点で不明です。
良い例があればお知恵を貸して頂けないでしょうか?



[java参考]
import javax.naming.NamingException;
import java.sql.SQLException;
・
・
・
・
/**
 * 継続画面編集
 * @param        Disp    画面情報
 * @return        void
 * @exception    NamingException,SQLException,Exception
 *             名前解決例外、SQL例外、例外
 */
 private void xxx(Disp inf)
  throws NamingException, SQLException, Exception {
         init(inf);
    inf.Disp.setData("1");
}
■No3501に返信(nepiaさんの記事)
> [OS]Windows2000
> [言語]VisualBasic.NET 2003
>
> こんにちは。
> セクション内の処理ステップ毎にTry〜Catch〜ではなく、
> セクション全体を包み込むような機能は実現できるのでしょうか?
>
> ネット上で調べた際、それらしきjava構文は見かけたのですが
> vb.netでも可能かが現時点で不明です。
> 良い例があればお知恵を貸して頂けないでしょうか?
>
>
>
> [java参考]
> import javax.naming.NamingException;
> import java.sql.SQLException;
> ・
> ・
> ・
> ・
> /**
> * 継続画面編集
> * @param Disp 画面情報
> * @return void
> * @exception NamingException,SQLException,Exception
> * 名前解決例外、SQL例外、例外
> */
> private void xxx(Disp inf)
> throws NamingException, SQLException, Exception {
> init(inf);
> inf.Disp.setData("1");
> }

いいたいことは次のようなことですか?

try
{
a = b;
}
catch
{

}

try
{
b = c;
}
catch
{

}

ではなく
try
{
a = b;
b = c;
}
catch
{

}

ということですか?
こんにちは。
早々のお返事ありがとうございます。

例えば、こういう処理を…
'**
'** ステップ毎のTry~Catch処理
'**
Private Sub syori()
'** 一回目の処理
Try
何かの処理1
Catch ex As Exception
例外対処()
End Try

'** 二回目の処理
Try
何かのの処理2
Catch ex As Exception
例外対処()
End Try
End Sub


'**
'** セクション内の例外をグローバルに拾ってくれそうな処理
'**
Private Sub syori() throw Exception
何かの処理1
何かのの処理2
End Sub

…何かの処理1、2の何れでも例外を検知する機能を実現したい(出来る?)
以下のサイト等を参考に試行錯誤している最中です。

http://www.microsoft.com/japan/msdn/net/bda/exceptdotnet.asp
■No3503に返信(nepiaさんの記事)
> こんにちは。
> 早々のお返事ありがとうございます。
>
> 例えば、こういう処理を…
> '**
> '** ステップ毎のTry~Catch処理
> '**
> Private Sub syori()
> '** 一回目の処理
> Try
> 何かの処理1
> Catch ex As Exception
> 例外対処()
> End Try
>
> '** 二回目の処理
> Try
> 何かのの処理2
> Catch ex As Exception
> 例外対処()
> End Try
> End Sub
>
> ↓
> '**
> '** セクション内の例外をグローバルに拾ってくれそうな処理
> '**
> Private Sub syori() throw Exception
> 何かの処理1
> 何かのの処理2
> End Sub
>
> …何かの処理1、2の何れでも例外を検知する機能を実現したい(出来る?)
> 以下のサイト等を参考に試行錯誤している最中です。
>
> http://www.microsoft.com/japan/msdn/net/bda/exceptdotnet.asp
>

処理1,2を二行続けて書いて、それ全体をtryで囲めばよろしいかと。
いっていることが違ったら、ごめんなさい。
処理の例外をグローバルに受け取りたいのなら
Throwを使ってみては?

Private Sub syori1()
'** 一回目の処理
Try
何かの処理1
Catch
Throw
End Try
End Sub

Private Sub syori2()
'** 二回目の処理
Try
何かのの処理2
Catch
Throw
End Try

End Sub

Private Sub syori()
Try
syori1
syori2
Catch ex As Exception
例外対処()
End Try
End Sub
■No3505に返信(Tom'sさんの記事)
> 処理の例外をグローバルに受け取りたいのなら
> Throwを使ってみては?
>
> Private Sub syori1()
> '** 一回目の処理
> Try
> 何かの処理1
> Catch
> Throw
> End Try
> End Sub
>
> Private Sub syori2()
> '** 二回目の処理
> Try
> 何かのの処理2
> Catch
> Throw
> End Try
>
> End Sub
>
> Private Sub syori()
> Try
> syori1
> syori2
> Catch ex As Exception
> 例外対処()
> End Try
> End Sub
>

まぁ、あんまり難しく考えないほうがいいですよ。
基本は、投げる、捕らえる、ですから。
どこかで投げたものが、いつか拾われればいいわけです。
>>http://www.microsoft.com/japan/msdn/net/bda/exceptdotnet.asp
>>
>
> 処理1,2を二行続けて書いて、それ全体をtryで囲めばよろしいかと。
> いっていることが違ったら、ごめんなさい。

お返事ありがとうございます。

'**
'** 一括して検出
'**
Private Sub syori()
Try
何かの処理1()
何かの処理2()
Catch ex As Exception
例外対処()
End Try
End Sub

というコードでしょうか?

例えば(スイマセン例え話が多くて)
セクションa⇒セクションb⇒セクションc…
と処理を行った場合、セクションcで例外検出したら最上位のセクションaで
まとめて例外対処を行おうと思っています(セクションbは例外throw)

セクション指定後Try~Catchを記述して例外はthrowしていけば実現できそうなので
試してみます。
ご指摘通り、セクション単位をTry~Catchで囲み
例外を一手に担いたいセクション以外をthrowすることで機能の実現は出来ました。

但し、クラス間を跨ぐ事などからセクションのPublic指定ばかりで
あまり美しくないコードになってしまいますが…。設計を見直します。
(´Д⊂グスン

皆さんのお力添えありがとうございます。
解決済み!
補足ですが、
キャッチする例外を指定したら、特定の例外だけはそのTryの中で消化して
それ以外の例外は上位のTryに投げることもできますよ。
解決済みのフラグを立てるのを漏らしておりました。
申し訳ございません。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板