2012-02-28 4 views
2

VB6では、ユーザー定義クラスでコンストラクタを指定できないことを理解しています。だから、メインのコードブロックとエンティティという名前のユーザー定義クラスに寸法エンティティという名前のコレクションオブジェクトを与えられた:VB6でカスタムクラスの匿名インスタンスを作成する

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 

事前にどれくらい多くのEntityインスタンスがあるかわかりません。

TIA、

まだ学習スティーブ

答えて

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

@Deanna編集していただきありがとうございます。 [あなたは私がそれを知っていると思うだろう](http://stackoverflow.com/a/10262247/15639)! :)明らかに私の助言に従わないでください。 – MarkJ

1

を試してみてください、あなたが必要ですそれを最初に変数に代入します。 割り当て後、プロパティを直接設定するか、カスタムInit()メソッドを使用することができます。クラスで

:ループでは

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

: 設定NewEntry =新規エントリ NewEntry.Init "weeble"、 "ボブ" entities.Add NewEntry

これらのいずれかを行うことができますあなたのループの中で直接的に、またはMarkJが言ったように工場の機能によって。 .Addに渡されると、そのインスタンスを新しいインスタンスに設定している限り、その変数を再利用できます。

1

他の2つの答えは問題なく、私は両方の方法を使用しました。しかし、私はもう一つの単純な解決策を考え出しました。ここではそれをやってのバニラ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 

ノート命名規則上、下ケースメソッド/プロパティ名をリードする.NETまたはVB6でJavaで一般的ですが、ありません。

+0

+1。言い換えれば、それについて心配しないでください。よく良いアドバイス! – MarkJ

関連する問題