Шаблоны в VB - PullRequest
       32

Шаблоны в VB

2 голосов
/ 08 сентября 2008

У меня есть некоторый код VB (фактически VBA), который в основном такой же, за исключением типа, на котором он работает. Поскольку я считаю, что принцип СУХОЙ является хорошим руководящим принципом для разработки программного обеспечения, я хочу написать одну подпрограмму для всех различных типов, над которыми нужно работать. Например, если бы у меня было два фрагмента кода, подобных этим:

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, которую я пропустил.

1 Ответ

1 голос
/ 08 сентября 2008

В VB6 нет ничего, что могло бы это сделать. Если вы обновляете Visual Studio Tools для Office с помощью .Net, вы можете использовать обобщенные значения:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...