Список Vs Set
1) Set не позволяет дублировать. Список позволяет дублировать. На основе реализации Set он также поддерживает порядок вставки.
, например: LinkedHashSet
. Он поддерживает порядок вставки. Пожалуйста, обратитесь к нажмите здесь
2) содержит метод. По характеру набора это даст лучшую производительность для доступа. Лучше всего его o (1). Но List имеет проблему с производительностью для вызова contains
.
Ну, вы можете приложить все усилия для создания надстроек VSTO, но если вам просто нужно позвонить + использовать некоторый код .net из Access, то зачем беспокоиться обо всей этой работе?
Просто создайте COM-объект в .net, и вы можете с легкостью использовать + вызов этого кода из Access VBA.
Итак, создайте класс .net.
Принудительная установка проекта на x86. (при условии доступа x32)
Установите флажок [] зарегистрировать для COM-взаимодействия. (это требуется только на вашем компьютере разработки).
Вам также при сборке нужно поставить галочку: [x] Сделать сборку COM видимой
Однако, выше установлено по умолчанию. Так что для того, чтобы все это работало с вашей стороны, здесь требуется только ОДИН флажок.
Теперь просто создайте класс в .net, скажем так:
Imports System.Runtime.InteropServices
<ClassInterface(ClassInterfaceType.AutoDual)>
Public Class Class1
Private m_Company As String = ""
Public Function MyHello()
MsgBox("Hello world")
End Function
Public Property Company As String
Get
Return m_Company
End Get
Set(value As String)
m_Company = value
End Set
End Property
End Class
В Access теперь вы можете установить ссылку на класс .net (tools-> ссылки в редакторе VBA).
Конечно, как только все это заработает, вы меняете код на позднюю привязку в VBA, как это делают все хорошие разработчики.
В приведенном выше классе, а затем в VBA, вы видите, что даже intel-sense работает для методов и свойств класса .net.
Итак, в VBA, обратите внимание на этот снимок экрана:
Обратите внимание, как все функции / функции отображаются как методы объекта в VBA.
Таким образом, вызов + потребление кода .net, который вы пишете, довольно прост и требует меньше кода, чем попытка настроить добавление VSTO.
Фактически, я рекомендую выше не только для Access, но и для Word, Excel и т. Д.
Таким образом, вышесказанное - это гораздо меньше работы, чем возиться с инструментами и настройкой для создания надстройки для офиса.
Конечный результат - ОЧЕНЬ простое кодирование в .net, такой код может использоваться VBA + Access. И дополнительным бонусом является то, что такой код также можно с легкостью использовать в файлах сценариев Excel, Word и даже Windows VBS. Фактически FoxPro, или даже, скажем, система учета sage 300 может напрямую использовать ваш код .net на своих языках программирования. Таким образом, любой язык или система, которая поддерживает COM-объекты (ActiveX), может использовать вышеуказанную простую надстройку.
Другими словами, код, который вы пишете и создаете, теперь может легко использоваться всеми офисами, и вам не нужно подключать грязную надстройку для каждой офисной программы.
Итак, чтобы спасти мир от бедности и голодающих детей, просто создайте простой класс в .net и используйте его из Office, как указано выше.
О единственной проблеме в настоящее время является распространение. Вы должны предоставить один .dll из .net и выполнить regasm на целевом компьютере, чтобы это работало. Однако это однострочный пакетный файл, и если вы используете какой-либо инсталлятор, у таких инсталляторов есть условия для выполнения (регистрации) объекта .net в любом случае через regasm. Если вы создали настоящую служебную надстройку, вам все равно потребуется создать и настроить установщик - и этот установщик может потребовать много усилий по сравнению с очень простой командой regasm для регистрации объекта .net.
И если вы действительно хотите упростить эту задачу, вы можете загрузить .net сбоку и даже не регистрировать объект .net.
В конце дня вышеприведенный пример супер простого класса прекрасно работает в Access + VBA и работает с меньшими затратами труда и средств, после чего вам понадобится получить некоторый шаблон надстройки VSTO, работающий с офисом.