2006年10月15日
川俣晶の縁側ソフトウェア技術雑記total 3427 count

メソッドが匿名であることの決定的な価値とは

Written By: 川俣 晶連絡先

 そうか!

 メソッドが名前を持たないことは一種の手抜きだと思っていて、全てのメソッドには識別子としての一意の名前がある方が良いと思っていましたが、そうではない事例があるわけですね。

 C# 2.0でたった今書いたコードです。

public class Authenticators

{

    public static Authenticator NullAuthenticator

        = delegate(HttpdEnveironment environment, 

                            HttpRequest httpRequest)

            {

                return ResultsFactory.GetOKResult();

            };

}

 クラスAuthenticatorsは不特定のアプリから利用されうる汎用のクラスです。

 ここで、NullAuthenticatorはアプリ側から差し替え可能なメソッドを意図しています。

 つまり、delegate型のメンバ変数として宣言されており、デフォルト値として匿名のメソッドが代入されています。アプリは、このメンバ変数を書き換えることにより、ライブラリの中を含め全てのNullAuthenticatorを呼び出すコードの呼び出し先を差し替えることができます。

 さて、ここで問題になるのは、NullAuthenticatorを呼ばずに直接デフォルトの処理メソッドを呼び出すコードを書いてしまったらどうなるのかです。そのようなコードがあれば、NullAuthenticatorを差し替えたプログラム中で処理の不整合が起こる可能性があり、危険です。

 ところが、デフォルト処理のメソッドが匿名であるなら、名前を指定して呼び出すことができないのです。どうしても呼び出したいなら、NullAuthenticatorを書き換える前に入っていた値を保存しておき、それを経由して呼ぶしかありません。しかし、そのような込み入ったコードを「うっかり間違って書いて気付かない」ということは、まずあり得ないでしょう。

 つまり、匿名のメソッドにより、安全性が高くなったわけです。

なぜ、そんな基本的なことを今頃やってるの? §

 それは、やっと今になってC# 2.0を本格的に使い始めたからだよ。

 まあ、いろいろ心理的に複雑で矛盾した軋轢があったということですね。

Facebook

このコンテンツを書いた川俣 晶へメッセージを送る

[メッセージ送信フォームを利用する]

メッセージ送信フォームを利用することで、川俣 晶に対してメッセージを送ることができます。

この機能は、100%確実に川俣 晶へメッセージを伝達するものではなく、また、確実に川俣 晶よりの返事を得られるものではないことにご注意ください。

このコンテンツへトラックバックするためのURL

https://mag.autumn.org/tb.aspx/20061015183251
サイトの表紙【技術雑記】の表紙【技術雑記】のコンテンツ全リスト 【技術雑記】の入手全リスト 【技術雑記】のRSS1.0形式の情報このサイトの全キーワードリスト 印刷用ページ

管理者: 川俣 晶連絡先

Powered by MagSite2 Version 0.36 (Alpha-Test) Copyright (c) 2004-2021 Pie Dey.Co.,Ltd.