超不定期雑記

~プログラムとかサイエンスとかいろいろと~

目次

Blog 利用状況

ニュース

書庫

わんくま名古屋#18LT資料「IDisposable を成敗する」

今回のわんくま名古屋ではLTを一本受け持ったんですが、そのスライドを公開します。

IDisposable を成敗する

IDisposable オブジェクトを生成したら、必ず Dispose() しなければなりません。
ファイル操作系の処理などでよく使われる IDisposable オブジェクトですが、COM系のライブラリでは重要度が飛躍的に高まります。
というか、ほとんど全部が IDisposable オブジェクトだしねぇ……

IDispose オブジェクトは例外が発生した場合でもきちんと処理しないといけないわけですが、これがまためんどくさい。
単純な try-catch 構文では大量のタイプ量と多段ネストに悩まされ、using構文を使ったとしても多段ネストの問題はクリアできません。
LDAPだったら3段程度なのであまり問題になりませんが、Excel操作では地獄を見ます。

ところがこの問題は、Stack を使えばあっさりとクリアできてしまうんです。
生成した IDisposable オブジェクトをスタックにガサガサ突っ込んで、finally節で foreach 使ってスタック要素を Dispose() すればOK。
これが非常に強力で、これまで多段ネストのせいで落ちていた可読性が、格段に良くなります。
しかも、Dispose() のし忘れはなし。
これが、私が C# からの Excel 操作を得意としている理由なんですね。


さらにこの機構を育てると、いっぱしのフレームワークになります。
次回の名古屋では、このフレームワークについて発表したいなと思います。

投稿日時 : 2011年7月10日 2:45

Feedback

# re: わんくま名古屋#18LT資料「IDisposable を成敗する」 2011/07/11 11:22 牟田口大介

pptxのリンクが切れている予感です。

# re: わんくま名古屋#18LT資料「IDisposable を成敗する」 2011/07/11 22:08 guicheng

>牟田口さん
いろいろとお恥ずかしいミスがorz
スミマセン、修正しました。

# re: わんくま名古屋#18LT資料「IDisposable を成敗する」 2011/10/16 20:41 neuecc

はじめまして。
資料拝見しましたが、usingに関して幾つか疑問に思いました。

> using()内で例外が発生すると dispose() が駆動しない
ここは、利点「確実にDispose()できる」と矛盾することが書かれていて
ちょっと意図が分からないのですが、Disposeが駆動しないということはないのでは、と。

usingでネストが酷くなるという話ですが、通常ここはフラットに書きます。
using( Dispose01 disp_obj01 = new Dispose01())
using( Dispose02 disp_obj02 = disp_obj01.GetChiled())
using( Dispose03 disp_obj02 = disp_obj02.GetChiled())
{
/* 何か処理 */
}

Visual Studioの自動コードフォーマットでも、
この多段usingはインデントしないようになっているように、推奨される書き方です。

Stackを使うアイディア、良いと思います。
蛇足な話で失礼しますが、Reactive Extensionsに収められている
CompositeDisposableというクラスが、同じ働きをすると思われます。
http://msdn.microsoft.com/en-us/data/gg577609

CompositeDisposableはICollection<IDisposable>かつIDisposableなクラスで、
AddによってIDisposableの追加
Clearによって中のIDisposableを全てDispose
Disposeによって中のIDisposableを全てDispose+以降Addされると中に加えずすぐにDisposeする
という動きをします。
IDisposableなので、そのものをusing対象にすることも出来る、というわけですね。

Reactive ExtensionsにはDisposable絡みで
様々な挙動を取るIDisposableなクラスが用意されているので
(SerialDisposable, SingleAssignmentDisposable, RefCountDisposable, etc...)
IDisposable周りをよく扱う場合は、Reactive Programmingと関係なくても
使ってみると良いかもしれません。

# IDisposable????????????????????? &laquo; ???????????????????????? 2011/10/31 22:01 Pingback/TrackBack

IDisposable????????????????????? &laquo; ????????????????????????

# Normally I do not learn post on blogs, but I wish to say that this write-up very pressured me to take a look at and do it! Your writing taste has been amazed me. Thanks, quite great post. 2021/08/29 2:21 Normally I do not learn post on blogs, but I wish

Normally I do not learn post on blogs, but I wish to say that
this write-up very pressured me to take a look at
and do it! Your writing taste has been amazed me. Thanks, quite great post.

# Hi to all, how is the whole thing, I think every one is getting more from this web page, and your views are fastidious for new users. scoliosis surgery https://coub.com/stories/962966-scoliosis-surgery scoliosis surgery 2021/09/14 9:46 Hi to all, how is the whole thing, I think every o

Hi to all, how is the whole thing, I think every one is getting more from this web
page, and your views are fastidious for new users.
scoliosis surgery https://coub.com/stories/962966-scoliosis-surgery scoliosis surgery

# Hi to all, how is the whole thing, I think every one is getting more from this web page, and your views are fastidious for new users. scoliosis surgery https://coub.com/stories/962966-scoliosis-surgery scoliosis surgery 2021/09/14 9:47 Hi to all, how is the whole thing, I think every o

Hi to all, how is the whole thing, I think every one is getting more from this web
page, and your views are fastidious for new users.
scoliosis surgery https://coub.com/stories/962966-scoliosis-surgery scoliosis surgery

# Hi to all, how is the whole thing, I think every one is getting more from this web page, and your views are fastidious for new users. scoliosis surgery https://coub.com/stories/962966-scoliosis-surgery scoliosis surgery 2021/09/14 9:48 Hi to all, how is the whole thing, I think every o

Hi to all, how is the whole thing, I think every one is getting more from this web
page, and your views are fastidious for new users.
scoliosis surgery https://coub.com/stories/962966-scoliosis-surgery scoliosis surgery

# Hi to all, how is the whole thing, I think every one is getting more from this web page, and your views are fastidious for new users. scoliosis surgery https://coub.com/stories/962966-scoliosis-surgery scoliosis surgery 2021/09/14 9:49 Hi to all, how is the whole thing, I think every o

Hi to all, how is the whole thing, I think every one is getting more from this web
page, and your views are fastidious for new users.
scoliosis surgery https://coub.com/stories/962966-scoliosis-surgery scoliosis surgery

# Why users still make use of to read news papers when in this technological world the whole thing is existing on net? 2021/10/26 15:47 Why users still make use of to read news papers wh

Why users still make use of to read news papers when in this
technological world the whole thing is existing
on net?

# This is a good tip particularly to those new to the blogosphere. Brief but very accurate information… Appreciate your sharing this one. A must read post! 2021/11/18 1:21 This is a good tip particularly to those new to th

This is a good tip particularly to those new to the blogosphere.
Brief but very accurate information… Appreciate your
sharing this one. A must read post!

# This is a good tip particularly to those new to the blogosphere. Brief but very accurate information… Appreciate your sharing this one. A must read post! 2021/11/18 1:22 This is a good tip particularly to those new to th

This is a good tip particularly to those new to the blogosphere.
Brief but very accurate information… Appreciate your
sharing this one. A must read post!

# This is a good tip particularly to those new to the blogosphere. Brief but very accurate information… Appreciate your sharing this one. A must read post! 2021/11/18 1:23 This is a good tip particularly to those new to th

This is a good tip particularly to those new to the blogosphere.
Brief but very accurate information… Appreciate your
sharing this one. A must read post!

# This is a good tip particularly to those new to the blogosphere. Brief but very accurate information… Appreciate your sharing this one. A must read post! 2021/11/18 1:23 This is a good tip particularly to those new to th

This is a good tip particularly to those new to the blogosphere.
Brief but very accurate information… Appreciate your
sharing this one. A must read post!

# ddQJyCwqwLOBOOGpLA 2022/04/19 9:47 johnansaz

http://imrdsoacha.gov.co/silvitra-120mg-qrms

タイトル
名前
Url
コメント