在VB6中创建自定义类的匿名实例

时间:2012-02-28 06:06:01

标签: collections vb6

我理解在VB6中,用户定义的类不能指定构造函数。因此,给定一个名为在主代码块中标注实体的Collection对象和一个名为Entity的用户定义类:

Public Class Entry
'local variable(s) to hold property value(s)
Private mvarcurrNameValue As String 'local copy
Private mvarnewwNameValue As String 'local copy

Public Property Let newwNameValue(ByVal vData As String)
    mvarnewwNameValue = vData
End Property

Public Property Get newwNameValue() As String
    newwNameValue = mvarnewwNameValue
End Property

Public Property Let currNameValue(ByVal vData As String)
    mvarcurrNameValue = vData
End Property

Public Property Get currNameValue() As String
    currNameValue = mvarcurrNameValue
End Property
End Class

如何在VB6领域实现以下C ++ / VB.NET习惯用法?

For Each foo In bar
   entities.Add (new Entity("Sinatra","Frank"))     'VB.NET seems to like this but not VB6
Next

我事先并不知道会有多少个实体实例。

TIA,

仍在学习史蒂夫

3 个答案:

答案 0 :(得分:4)

尝试factory method

Public function NewEntry(a, b) As Entry
   Dim o As Entry
   Set o = New Entry
   o.a = a
   o.b = b
   Set NewEntry = o
End Function

然后

For Each foo In bar 
   entities.Add NewEntry("Sinatra","Frank")
Next 

答案 1 :(得分:1)

要在对象实例上设置属性和调用方法,首先需要将其分配给变量。 分配后,您可以直接设置属性或使用自定义Init()方法。

在班级中:

Public Sub Init(ByVal NewName As string, ByVal CurName As String)
  mvarnewwNameValue = NewName
  mvarcurrNameValue = CurName
End Sub

在循环中:     设置NewEntry =新条目     NewEntry.Init“weeble”,“bob”     entities.Add NewEntry

这些可以直接在你的循环中完成,也可以像MarkJ所说的那样通过工厂函数完成。请注意,一旦将其传递给.Add,只要将其设置为New实例,就可以重用该变量。

答案 2 :(得分:1)

另外两个答案很好,我使用了两种方法。但我想我把另一个简单的解决方案。这是vanila VB6的做法:

Dim tempEntity As Entity
For Each foo In bar
   Set tempEntity = New Entity
   tempEntity.currNameValue = "Sinatra"
   tempEntity.newwNameValue = "Frank"
   Call entities.Add(tempEntity) 
   'Or if you prefer the no parens style use this:
   'entities.Add tempEntity
Next foo

关于命名约定的注释,领先的小写方法/属性名称在Java中很常见,但在.NET或VB6中则不常见。