5

私は代理人に慣れようとしています。http: //msdn.microsoft.com/en-us/library/aa288459 (v = vs.71).aspxで、次のように読んでいます。

「CまたはC++の関数ポインターとは異なり、デリゲートはオブジェクト指向、タイプセーフ、およびセキュアです。」

つまり、私はC ++のバックグラウンドを持っており、そこで「違う」という言葉を理解する方法がわからないのです。デリゲートがオブジェクト指向であり、C ++ fncポインターがそうではないということはどういう意味ですか?タイプセーフ、およびセキュアについても同じです。

誰かがいくつかの例と反対の例を示すことができますか?

ありがとう。

4

1 に答える 1

6

デリゲートは、関数ポインターよりもかなり多くのことを行います。関数アドレスを格納するだけでなく、ターゲットオブジェクトへの参照も格納します。C++メソッドポインタとは異なります。したがって、インスタンスメソッドを呼び出すために使用するのは簡単です。これで「オブジェクト指向」の主張が処理されます。

そこから少し下り坂ですが、デリゲートを割り当てるときに関数のシグネチャがデリゲートの型と完全に一致することをコンパイラが検証することで、型の安全性が確保されます。これはC++でも違いはありませんが、不一致を取り除く方法はありません。もう1つの考えられるセキュリティの側面は、デリゲートオブジェクトによって保持されているオブジェクト参照がガベージコレクタに表示されることです。したがって、削除されたオブジェクトに対してインスタンスメソッドを呼び出すことはできません。

于 2012-05-26T14:09:46.670 に答える