问题标签 [late-binding]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
2494 浏览

python - 为什么 map() 和列表理解的结果不同?

以下测试失败:

换句话说:

0 投票
8 回答
4292 浏览

.net - 适用于 VB6 程序员的 Option Strict On 和 .NET

我正在准备一个关于 Visual Basic 2005 的课程,目标是迁移到 .NET 平台的 Visual Basic 6 程序员。

我想就是否建议他们始终启用Option Strict提出一些建议。

我专门使用 C 风格的编程语言,主要是 Java 和 C#,所以对我来说,显式转换是我一直希望我必须做的事情,因为它从来都不是一种选择。
但是,我认识到使用内置支持后期绑定的语言的价值,因为不必过于明确地说明代码中的类型确实可以节省时间。动态类型语言的流行传播进一步证明了这一点,甚至在具有动态语言运行时的 .NET 平台上。

考虑到这一点,是否应该鼓励第一次使用 VB.NET 并具有 VB6 背景的人进入必须使用编译时类型检查的心态,因为这是“最佳实践” CLR?或者继续享受后期绑定的好处是否“可以”?

0 投票
10 回答
36586 浏览

python - 词法闭包是如何工作的?

当我在调查 Javascript 代码中的词法闭包问题时,我在 Python 中遇到了这个问题:

请注意,此示例有意避免lambda. 它打印“4 4 4”,这令人惊讶。我期待“0 2 4”。

这个等效的 Perl 代码做得对:

打印“0 2 4”。

你能解释一下区别吗?


更新:

问题在于i全球化。这显示相同的行为:

如注释行所示,i当时是未知的。尽管如此,它仍然打印“4 4 4”。

0 投票
3 回答
1592 浏览

c# - 如何修改方法内的装箱值类型

我正在尝试构建一个库来简化 C# 中的后期绑定调用,但我在使用参考参数时遇到了麻烦。我有以下方法来添加方法调用中使用的参数

这不适用于值类型,因为它们被装箱为对象,因此它们不会被修改。例如:

那是行不通的。后期绑定调用成功,保存参数(_parameters)的内部列表确实被修改,但调用外部的值没有被修改。

有谁知道克服这个限制的简单方法?无法修改 AddParameter 签名,与后期绑定调用一样,您无法提前知道参数的类型(以及在调用之前将调用的所有参数插入对象数组中的任何一种方式)

提前致谢。

0 投票
6 回答
4589 浏览

asp-classic - 如何从 ASP Classic 中的变量调用方法?

例如,我如何在下面运行 me.test?

ASP 寻找方法“myvar”但没有找到。在 PHP 中我可以简单地说 $me->$myvar 但 ASP 的语法不区分变量和方法。建议?

与此密切相关的是,ASP Classic 中是否有 method_exists 函数?

提前致谢!

编辑:我正在编写一个验证类,并想通过管道分隔的字符串调用方法列表。

例如,要验证名称字段,我会调用:

我喜欢用一行来显示给定字段的所有验证方式的想法。字符串的每个管道分隔部分都是方法的名称。

如果您有更好的设置建议,我会全力以赴!

0 投票
3 回答
12583 浏览

vba - 关于 VB6/VBA 中 CreateObject() 的问题

我可以做这个:

或者我可以这样做:

我如何知道 CreateObject 使用什么字符串?例如,我怎么会知道使用“脚本”。“Scripting.FileSystemObject”的一部分?你去哪里查这个?

0 投票
6 回答
20832 浏览

smalltalk - 早期绑定与后期绑定:比较优缺点是什么?

在讨论计算机语言的演变时,Alan Kay 说他的 Smalltalk 的一个最重要的属性是后期绑定。它赋予语言可塑性和可扩展性,并允许随着时间的推移重构不适当的耦合。你同意?早期绑定是否有补偿优势来解释为什么它似乎是两种范式中可以使用的域的主导?

我个人的经验(不够广泛或不够权威),基于使用 javascript、jQuery、jsext、actionscript、php、java、RoR 和 asp.net 实现 Web 应用程序,似乎表明后期绑定和膨胀之间存在正相关关系减少。我确信早期绑定有助于检测和防止一些类型安全错误,但自动完成和良好的 IDE 以及一般的良好编程实践也是如此。因此,在我的风险规避方面恢复我的理性观点之前,我倾向于让自己支持后期绑定方面。

但是我真的对如何平衡权衡没有很好的理解。

0 投票
6 回答
16658 浏览

c# - C# .NET 是否支持 IDispatch 后期绑定?


问题

我的问题是:C# 是否天生支持后期绑定 IDispatch?


假装我正在尝试自动化 Office,同时与客户安装的任何版本兼容。

在 .NET 世界中,如果您在安装 Office 2000 的情况下进行开发,那么从现在到结束,每个开发人员和每个客户都必须拥有 Office 2000。

在 .NET 之前的世界中,我们使用COM与 Office 应用程序通信。

例如:

1) 使用与版本无关的 ProgID

解决为:

然后使用 COM,我们要求将这些类之一实例化为一个对象:

现在我们要参加比赛了——能够在我的应用程序中使用 Excel。当然,如果真的要使用对象,就得调用有某种调用方式的方法。

我们可以得到各种接口声明,翻译成我们的语言。这种技术很好,因为我们得到

  • 早期绑定
  • 代码洞察力
  • 编译类型语法检查

一些示例代码可能是:


但是使用接口有一个缺点:我们必须掌握各种接口声明,并翻译成我们的语言。而且我们被困在使用基于方法的调用中,必须指定所有参数,例如:

事实证明,在现实世界中,它有一些我们愿意放弃的缺点:

  • 早期绑定
  • 代码洞察力
  • 编译时语法检查

而是使用IDispatch后期绑定:

因为 Excel 自动化是为 VB 脚本设计的,所以可以省略很多参数,即使没有它们就不会出现重载。

注意:不要将我的 Excel 示例与我想使用 IDispatch 的原因混淆。并非每个 COM 对象都是 Excel。某些 COM 对象除了通过 IDispatch 之外没有其他支持。

0 投票
4 回答
5925 浏览

c++ - C ++中的双重调度/多方法

我有一个关于 C++ 双重调度的问题。在下面的代码中,我希望第二组的结果与第一组的结果相匹配。

我不知道实际类型(除非我尝试 dynamic_cast),但我知道该对象继承自 BaseClass 类型。实现这一目标的最有效(性能方面)的方法是什么?

在谷歌搜索了一段时间后,我发现了双重调度和 loki 多方法。我在 Shape 示例中遇到的问题是,在我的应用程序中,Processor 和 BaseClass 是完全独立的,并且没有可以相互调用的通用方法。其次,只有一个处理器(即没有任何东西继承自它)。

谢谢你的帮助。

0 投票
7 回答
98659 浏览

c# - 早期和晚期绑定

当 C# 中发生早期/晚期绑定时,我正试图弄清楚。

非虚拟方法总是早期绑定的。虚拟方法总是后期绑定的:编译器插入额外的代码来解析在执行时绑定到的实际方法并检查类型安全。所以亚型多态性使用后期绑定。

使用反射调用方法是后期绑定的一个例子。我们编写代码来实现这一点,而不是编译器。(例如调用 COM 组件。)

当 Option Strict 关闭时,VB.NET 支持隐式后期绑定。当一个对象被分配给一个声明为 Object 类型的变量时,它是后期绑定的。VB 编译器插入代码以在执行时绑定到正确的方法并捕获无效调用。C# 不支持此功能。

我是否朝着正确的方向前进?

调用委托和通过接口引用调用方法呢?是早绑定还是晚绑定?