「C Sharp/イベント」の版間の差分

提供: MonoBook
ナビゲーションに移動 検索に移動
imported>Administrator
 
1行目: 1行目:
 
[[C Sharp|C#]]における'''イベント'''(event)とは、[[デリゲート]](≒[[関数ポインタ]])に対し、外部から追加(+=演算子)と削除(-=演算子)のみを行えるように[[隠蔽]]し、かつ宣言した[[クラス]]からしか呼べない(実行できない)ようにする機能のことである。
 
[[C Sharp|C#]]における'''イベント'''(event)とは、[[デリゲート]](≒[[関数ポインタ]])に対し、外部から追加(+=演算子)と削除(-=演算子)のみを行えるように[[隠蔽]]し、かつ宣言した[[クラス]]からしか呼べない(実行できない)ようにする機能のことである。
  
イベントは、素の[[デリゲート]]が[[オブジェクト指向]]の本質の一つである[[隠蔽]]の原則に反するために用意されているものであり、イベントを使える場合には積極的にイベントを使ってデリゲートを隠蔽しましょうと言われている。
+
[[C Sharp|C#]]のイベント構文は、素の[[デリゲート]]が[[オブジェクト指向]]の本質の一つである[[隠蔽]]の原則に反する、という問題に対処するために用意されているものであり、イベントを使える場合には積極的にイベントを使ってデリゲートを隠蔽しましょうと言われている。
  
 
== 使用例 ==
 
== 使用例 ==

2012年5月2日 (水) 04:50時点における最新版

C#におけるイベント(event)とは、デリゲート(≒関数ポインタ)に対し、外部から追加(+=演算子)と削除(-=演算子)のみを行えるように隠蔽し、かつ宣言したクラスからしか呼べない(実行できない)ようにする機能のことである。

C#のイベント構文は、素のデリゲートオブジェクト指向の本質の一つである隠蔽の原則に反する、という問題に対処するために用意されているものであり、イベントを使える場合には積極的にイベントを使ってデリゲートを隠蔽しましょうと言われている。

使用例[編集 | ソースを編集]

    using System;

    // デリゲート型の定義
    public delegate void SomeDelegate(string name);

    class AppMain
    {
        // イベント変数の宣言
        // 書式は、呼び出し制限したいデリゲート名 公開するイベント名
        public event SomeDelegate SomeEvent;

        static void Main(string[] args)
        {
            new AppMain().Run();
            Console.ReadLine();
        }

        void Run()
        {
            // ここでは内部からだが、外部からも追加削除はできる。
            SomeEvent += new SomeDelegate(Func1);
            // 外部からは呼び出せない。
            SomeEvent("いべんと"); 
        }

        void Func1(string name)
        {
            Console.WriteLine("こんにちは, " + name);
        }
    }

イベントを使わずにデリゲートだけを用いて書くと以下のようになる。 得られる結果は同じだが、AppMainクラスではない別のクラスからもデリゲートを実行できてしまう。

    using System;

    // デリゲート型の定義
    public delegate void SomeDelegate(string name);

    class AppMain
    {
        // デリゲート変数の宣言
        // 書式は、呼び出し制限したいデリゲート名 公開するイベント名
        public SomeDelegate DelegateInstance;

        static void Main(string[] args)
        {
            new AppMain().Run();
            Console.ReadLine();
        }

        void Run()
        {
            this.DelegateInstance += new SomeDelegate(Func1);
            // ここでは内部から呼んでいるが、外部からも呼び出せてしまう。
            this.DelegateInstance("でりげーと"); 
        }

        void Func1(string name)
        {
            Console.WriteLine("こんにちは, " + name);
        }
    }

関連項目[編集 | ソースを編集]

参考文献[編集 | ソースを編集]


外部リンク[編集 | ソースを編集]