Я думаю, что это, наверное, лучшее, что я могу сделать. Я не приму это, если кто-то придет с более удовлетворительным ответом.

имаюсь программированием в 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 с закрытыми членами?» когда Дик ответил на это.

Ответы на вопрос(1)

Ваш ответ на вопрос