2

私はいくつかのVBコード(実際にはVBA)を持っていますが、それは動作するタイプを除いて基本的に同じです。DRYの原則はソフトウェア開発の優れた指針であると思うので、操作する必要のあるさまざまなタイプすべてに対して1つのルーチンを作成したいと思います。たとえば、次のような2つのコードスニペットがある場合:

Dim i as Obj1
Set i = RoutineThatReturnsObj1()
i.property = newvalue

Dim i as Obj2
Set i = RoutineThatReturnsObj2()
i.property = newvalue

両方のインスタンスを処理するために、次のようなものが必要です。

Sub MyRoutine(o as ObjectType, r as RoutineToInitializeObject, newvalue as value) 
   Dim i as o
   Set i = r
   i.property = newvalue
End Sub

C ++を使用している場合は、テンプレートを生成し、それについてはこれ以上言いません。しかし、私はVBAを使用しています。VBA言語定義にはC++テンプレートのような機能はないと確信していますが、同じ効果を達成するための他の手段はありますか?答えはノーだと思いますが、VBAのいくつかの機能を見逃している可能性があるため、ここで質問します。

4

1 に答える 1

1

VB6にはそれを行うものは何もありません。.Netを使用してVisualStudioTools for Officeに更新する場合は、ジェネリックを使用できます。

Function MyRoutine(Of O)(R As Delegate, newvalue As Object) As O
    Dim i As O = CType(r.Method.Invoke(Nothing, Nothing), O)

    'you need another parameter to tell it which property to use'
    ' and then use reflection to set the value'
    i.property = newvalue 
    return i
End Function
于 2008-09-08T13:43:28.097 に答える