Есть ли способ написать тест на равенство для класса VBA с частными членами, не раскрывая знания о существовании этих частных членов?

Я довольно много занимаюсь программированием Excel на VBA, но не очень много. объектно-ориентированный. Вот то, что время от времени всплывает, что меня беспокоит, и мне интересно, что-то мне не хватает.

В VBA, скажем, у меня есть класс C, определенный с некоторыми закрытыми членами, например:

'...

Private hidden1_ As Double
Private hidden2_ As Double

'...

Если бы VBA работал как C ++ или (большинство?) Других языков, поддерживающих ООП, я мог бы написать функцию-член для проверки равенства между экземплярами класса C следующим образом:

'Error: won't compile!
Public Function equal(cinst As C) As Boolean
    equal = (hidden1_ = cinst.hidden1_ And hidden2_ = cinst.hidden2_)
End Function

Конечно, это не будет компилироваться в VBA, потому что функции-члены класса могут обращаться только к частным членам класса того же экземпляра, для которого они вызываются. Лучшее, что я когда-либо придумал для такого рода вещей, - это вместо этого определить две функции-члены, подобные этой:

Public Function equalDef(hidden1 As Double, hidden2 As Double) As Boolean
    equalDef = (hidden1_ = hidden1 And hidden2_ = hidden2)
End Function

Public Function equal(cinst As C) As Boolean
    equal = cinst.equalDef(hidden1_, hidden2_)
End Function

Это громоздко и раскрывает знания о существовании частных членов класса, но, по крайней мере, позволяет избежать фактического раскрытия значения частных членов класса.

Это лучшее, что я могу сделать?

РЕДАКТИРОВАТЬ:

Как обычно, после ответа я нашел лучший способ сформулировать вопрос. Он был озаглавлен «Есть ли более чистый способ написать тест на равенство для класса VBA с закрытыми членами?» когда Дик ответил на него.

5
задан jtolle 20 December 2010 в 16:49
поделиться