Скажет, у вас есть этот код в модуле под названием Module1
:Обнаруживается в VBA?
Option Explicit
Private Type TSomething
Foo As Integer
Bar As Integer
End Type
Public Something As TSomething
в эквиваленте C# код, если вы сделали Something
поля public
, код больше не будет компилировать, из-за противоречивые доступностями - в типа поля менее доступным, чем само поле. Это имеет смысл.
Однако в VBA вы могли бы иметь этот код в Module2
:
Sub DoSomething()
Module1.Something.Bar = 42
Debug.Print Module1.Something.Bar
End Sub
И вы получите IntelliSense, печатая его, и он собирает, и он работает, и он выводит 42
.
Почему? Как это работает, с точки зрения COM? Является ли это частью спецификации языка?
В module2, вы можете определить переменную типа 'Module1.TSomething' и назначить, что' Module1.Something' ? –
@SimonForsberg Ошибка компиляции (как и ожидалось) - «Определенный пользователем тип не определен» ... другими словами, тип виден * для использования *, но не * для деклараций * ... –
Звучит exaclty, как работает Java, не то, что этот вопрос касается Java, но в любом случае. Это имеет смысл для меня, но опять же ... Я парень Java. –