我理解在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,
仍在学习史蒂夫
答案 0 :(得分:4)
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中则不常见。