首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VB6中的多态行为

VB6中的多态行为
EN

Stack Overflow用户
提问于 2010-04-06 04:50:02
回答 3查看 933关注 0票数 4

我最近注意到了VB6中的CallByName关键字。

因为这需要一个对象,过程名,“调用类型”和参数数组,这能被用来“伪造”某些类型的多态行为吗?

我可以创建两个类,A类和B类,每个类都有相同的方法Foo,并且:

代码语言:javascript
复制
Dim list As New Collection
Dim instanceA As New ClassA
Dim instanceB As New ClassB
Dim current As Object

Call list.Add(instanceA)
Call list.Add(instanceB)

For Each current in list
  Call CallByName(current, "methodName", vbMethod)
Next

以前有人这么做过吗?有问题吗?可怕的想法还是天才的想法?暗示?意外的后果?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-04-06 04:58:01

为什么是假的多态性?VB6以接口的形式具有真正的多态性:

代码语言:javascript
复制
' Interface1.cls '

Sub Foo()
End Sub

' --------------------------------------------- '

' Class1.cls '
Implements Interface1

Private Sub Interface1_Foo()
    ? "Hello from class 1"
End Sub

' --------------------------------------------- '

' Class2.cls '
Implements Interface1

Private Sub Interface1_Foo()
    ? "Hello from class 2"
End Sub

' --------------------------------------------- '

' Module1.mod '

Dim x As Interface1
Set x = New Class1
Call x.Foo()
Set x = New Class2
Call x.Foo()
票数 14
EN

Stack Overflow用户

发布于 2010-04-06 05:04:36

虽然我同意unicorn先生的观点,但我不禁要指出,CallByName也是不必要的(在这种情况下),因为您可以使用标准方法语法调用该方法,它将导致后期绑定(即在编译时未解析)调用:

代码语言:javascript
复制
...
For Each current In list
    Call current.methodName
Next

在我看来,CallByName的真正用途是引用方法名称/属性,其中名称来自(可能是经过计算的)字符串value...an绝对令人厌恶。

票数 6
EN

Stack Overflow用户

发布于 2010-04-07 01:36:20

如果您所处的情况是,您继承了一个没有任何接口的大型项目(听起来像是这样),那么CallByName是一个伪造多态的很棒的工具。我一直在使用它--从来没有遇到过任何问题。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2581087

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档