答えて

13

関数ポインタは、同様の変数を関数に渡すことができます。関数ポインタは、C/C++などのファーストクラスのメソッドをサポートしていない言語で関数を渡すための基本的な方法です。

ファーストクラスのメソッド基本的に、同じ変数の周りの関数を渡すことができます。メソッド(緩く)は関数を意味します。これは、基本的にファーストクラスファンクションを意味します。簡単に言えば、関数は変数のように「ファースト・クラスの市民」として扱われます。昔は(C/C++)関数を直接渡すことができず、関数ポインタのような回避策に頼らざるを得なかったので、関数はファーストクラスの市民ではないという。

代理人は、ファーストクラスの方法に対するC#の回答です。それは閉鎖を含むので、代表団はやや強力で、次のコードスニペットを考えてみます。デリゲートがクロージャを使用することができますので、ローカル変数aを参照することができ

void foo(int a) 
{ 
    void bar() { writefln(a); } 
    call(&bar); 
} 

void call(void delegate() dg ) { dg(); } 
int main(char[][] args) { 
    foo(100); 
} 

お知らせbarこと。

クローズは、最初は非常に混乱する可能性があります。しかし、レイジーマンの定義は本当に簡単です。基本的には、人間が期待する方法で変数を利用できるということです。言い換えれば、変数は、ソースコードの構造を読むことによって、存在するように見える場所で参照することができます。たとえば、上記のコードを見てください。閉鎖を行わなかった場合、afooにローカルであったにすぎず、別の機能であるbarではないため、baraを参照することができませんでした。

動的プロキシは奇数です。これらのアイテムには属しません。それを説明するには、非常に長いテキストが必要です。それは有名なProxy Patternに由来します。 Proxy Patternの問題は、ProxyクラスがSubjectと同じインターフェースを実装する必要があることでした。動的プロキシとは、基本的には、反射的アプローチを使用してSubjectのメソッドを発見することで、ProxyPatternをSubjectのインターフェースに結びつけないようにすることを意味します。

0

私が知っているだけのもの:

  • 関数ポインタ:ちょうどその、コードの一部へのポインタ。あなたはそれにジャンプし、実行します。型付き言語は、いくつかのパラメータ渡し規則(すなわち、C宣言)を実施することができる。
  • クロージャ:ある状態が対になる関数。レキシカルスコープの言語(Scheme、JavaScript、Luaなど)で自然に書かれています。複数のクロージャが同じ状態(またはその一部)を共有できるため、OOPを実装する簡単な方法になります。
  • ファーストクラスのメソッド:オブジェクトインスタンスとメソッドから作成されたクロージャ。クロージャとネイティブOOP(Python、JavaScript)の両方を使用するいくつかの言語は自動的にクロージャを作成できます。
0

閉鎖はプログラミング言語の概念です。デリゲートはMS.NETでの実現です。

MS.NETの代理人は、オブジェクトのメソッドへの強く型付けされたポインタです(デリゲートインスタンスは、オブジェクトとそのメソッドの両方を指します)。いくつかのvoid delegateインスタンスを1つに結合する方法もあります。

関連する問題