タグ付けされた質問 「late-binding」

9
字句閉鎖はどのように機能しますか?
私はJavascriptコードの字句クロージャーで発生した問題を調査していたところ、Pythonでこの問題に遭遇しました。 flist = [] for i in xrange(3): def func(x): return x * i flist.append(func) for f in flist: print f(2) この例では注意深く回避していlambdaます。意外と「4 4 4」と印刷されます。「0 2 4」を期待します。 この同等のPerlコードはそれを正しく行います: my @flist = (); foreach my $i (0 .. 2) { push(@flist, sub {$i * $_[0]}); } foreach my $f (@flist) { print …


7
早期および遅延バインディング
C#でアーリー/レイトバインディングが発生したときに頭を悩ませようとしています。 非仮想メソッドは常に早期にバインドされます。仮想メソッドは常にレイトバウンドです。コンパイラーは、実行時にバインドする実際のメソッドを解決するために追加のコードを挿入し、型の安全性をチェックします。したがって、サブタイプのポリモーフィズムは遅延バインディングを使用します。 リフレクションを使用してメソッドを呼び出すことは、遅延バインディングの例です。コンパイラではなく、これを実現するコードを記述します。(たとえば、COMコンポーネントの呼び出し。) VB.NETは、Option Strictがオフの場合、暗黙的な遅延バインディングをサポートします。オブジェクトは、Object型であると宣言された変数に割り当てられると、レイトバウンドされます。VBコンパイラは、実行時に適切なメソッドにバインドし、無効な呼び出しをキャッチするコードを挿入します。C#はこの機能をサポートしていません。 私は正しい方向に向かっていますか? デリゲートを呼び出し、インターフェイス参照を介してメソッドを呼び出すのはどうですか?それは初期バインディングですか、それとも遅延バインディングですか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.