Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Пространство My имен в Visual Basic предоставляет свойства и методы, которые позволяют легко воспользоваться преимуществами платформы .NET Framework. Пространство My имен упрощает распространенные проблемы программирования, часто сокращая сложную задачу до одной строки кода. Кроме того, пространство имен My полностью расширяемо, так что вы можете настроить поведение My и добавить новые службы в его иерархию, чтобы адаптироваться к конкретным потребностям приложения. В этом разделе обсуждается настройка существующих членов пространства имен My и добавление собственных пользовательских классов в пространство имен My.
Настройка существующих My элементов пространства имен
Пространство My имен в Visual Basic предоставляет часто используемые сведения о вашем приложении и компьютере, а также многое другое. Полный список объектов в пространстве имен см. в My разделе "Моя ссылка". Возможно, необходимо настроить существующие члены My пространства имен, чтобы они лучше соответствовали потребностям приложения. Любое свойство объекта в My пространстве имен, которое не доступно только для чтения, можно задать для пользовательского значения.
Например, предположим, что вы часто используете объект My.User для доступа к текущему контексту безопасности пользователя, выполняющего ваше приложение. Однако ваша компания использует настраиваемый объект пользователя для предоставления дополнительных сведений и возможностей для пользователей внутри компании. В этом сценарии можно заменить значение My.User.CurrentPrincipal по умолчанию свойства экземпляром собственного пользовательского основного объекта, как показано в следующем примере:
My.User.CurrentPrincipal = CustomPrincipal
Установка свойства CurrentPrincipal на объекте My.User изменяет идентификатор, от имени которого выполняется приложение. Объект My.User , в свою очередь, возвращает сведения о только что указанном пользователе.
Добавление элементов в My объекты
Типы, возвращаемые из My.Application и My.Computer определяются как Partial классы. Таким образом, можно расширить My.Application и My.Computer объекты, создав Partial класс с именем MyApplication или MyComputer. Класс не может быть классом Private . Если вы указываете класс как часть пространства имен My, можно добавить свойства и методы, которые будут включены в объекты My.Application или My.Computer.
В следующем примере свойство с именем DnsServerIPAddresses добавляется к объекту My.Computer.
Imports System.Net.NetworkInformation
Namespace My
Partial Class MyComputer
Friend ReadOnly Property DnsServerIPAddresses() As IPAddressCollection
Get
Dim dnsAddressList As IPAddressCollection = Nothing
For Each adapter In System.Net.NetworkInformation.
NetworkInterface.GetAllNetworkInterfaces()
Dim adapterProperties = adapter.GetIPProperties()
Dim dnsServers As IPAddressCollection = adapterProperties.DnsAddresses
If dnsAddressList Is Nothing Then
dnsAddressList = dnsServers
Else
dnsAddressList.Union(dnsServers)
End If
Next adapter
Return dnsAddressList
End Get
End Property
End Class
End Namespace
Добавление пользовательских объектов в My пространство имен
My Хотя пространство имен предоставляет решения для многих распространенных задач программирования, вы можете столкнуться с задачами, которые My пространство имен не обрабатывает. Например, приложение может получить доступ к пользовательским службам каталогов для пользовательских данных, или приложение может использовать сборки, которые не установлены по умолчанию с Visual Basic. Пространство имен можно расширить My , чтобы включить пользовательские решения для распространенных задач, относящихся к вашей среде. Пространство My имен можно легко расширить, чтобы добавить новых членов в соответствии с растущими потребностями приложения. Кроме того, вы можете развернуть My расширения пространства имен для других разработчиков, используя шаблон Visual Basic.
Добавление элементов в My пространство имен
Так как My это пространство имен, как и любое другое пространство имен, вы можете добавить в него свойства верхнего уровня, просто добавив модуль и указав значение NamespaceMy. Заметите модуль атрибутом HideModuleName , как показано в следующем примере. Атрибут HideModuleName гарантирует, что IntelliSense не будет отображать имя модуля при отображении элементов My пространства имен.
Namespace My
<HideModuleName()>
Module MyCustomModule
End Module
End Namespace
Чтобы добавить члены в пространство имен My, при необходимости добавьте свойства в модуль. Для каждого свойства, добавленного в пространство имен My, добавьте закрытое поле типа ThreadSafeObjectProvider(Of T), где ThreadSafeObjectProvider(Of T) — это тип, возвращаемый вашим пользовательским свойством. Это поле используется для создания потокобезопасных экземпляров объектов, возвращаемых свойством, вызывая метод GetInstance. В результате каждый поток, обращаюющийся к расширенному свойству, получает собственный экземпляр возвращаемого типа. В следующем примере добавляется свойство с именем SampleExtension типа SampleExtension в My пространство имен:
Namespace My
<HideModuleName()>
Module MyCustomExtensions
Private _extension As New ThreadSafeObjectProvider(Of SampleExtension)
Friend ReadOnly Property SampleExtension() As SampleExtension
Get
Return _extension.GetInstance()
End Get
End Property
End Module
End Namespace
Добавление событий в пользовательские My объекты
Вы можете использовать объект My.Application для вызова событий для пользовательских объектов My путем расширения частичного класса MyApplication в пространстве имен My. Для проектов под управлением Windows можно дважды щелкнуть узел "Мой проект " для проекта в обозревателе решений. В конструкторе проектов Visual Basic перейдите на вкладку "Приложение " и нажмите кнопку "Просмотреть события приложения ". Будет создан новый файл с именем ApplicationEvents.vb . Он содержит следующий код для расширения MyApplication класса:
Namespace My
Partial Friend Class MyApplication
End Class
End Namespace
Можно добавить обработчики событий для пользовательских My объектов, добавив пользовательские обработчики событий в MyApplication класс. Кастомные события позволяют вам добавлять код, который будет выполняться при добавлении или удалении обработчика событий, а также при вызове самого события. Обратите внимание, что код для настраиваемого события выполняется только в том случае, AddHandler если пользователь добавляет код для обработки события. Например, рассмотрим, что SampleExtension объект из предыдущего раздела имеет Load событие, для которого требуется добавить настраиваемый обработчик событий. В следующем примере кода показан настраиваемый обработчик событий с именем SampleExtensionLoad , который будет вызываться при возникновении My.SampleExtension.Load события. При добавлении кода для обработки нового My.SampleExtensionLoad события AddHandler выполняется часть этого пользовательского кода события. Метод MyApplication_SampleExtensionLoad включен в пример кода, чтобы показать пример обработчика событий, обрабатывающего My.SampleExtensionLoad событие. Обратите внимание, что SampleExtensionLoad событие будет доступно при выборе параметра "Мои события приложения " в раскрывающемся списке слева над редактором кода при редактировании файла ApplicationEvents.vb .
Namespace My
Partial Friend Class MyApplication
' Custom event handler for Load event.
Private _sampleExtensionHandlers As EventHandler
Public Custom Event SampleExtensionLoad As EventHandler
AddHandler(ByVal value As EventHandler)
' Warning: This code is not thread-safe. Do not call
' this code from multiple concurrent threads.
If _sampleExtensionHandlers Is Nothing Then
AddHandler My.SampleExtension.Load, AddressOf OnSampleExtensionLoad
End If
_sampleExtensionHandlers =
System.Delegate.Combine(_sampleExtensionHandlers, value)
End AddHandler
RemoveHandler(ByVal value As EventHandler)
_sampleExtensionHandlers =
System.Delegate.Remove(_sampleExtensionHandlers, value)
End RemoveHandler
RaiseEvent(ByVal sender As Object, ByVal e As EventArgs)
If _sampleExtensionHandlers IsNot Nothing Then
_sampleExtensionHandlers.Invoke(sender, e)
End If
End RaiseEvent
End Event
' Method called by custom event handler to raise user-defined
' event handlers.
<Global.System.ComponentModel.EditorBrowsable(
Global.System.ComponentModel.EditorBrowsableState.Advanced)>
Protected Overridable Sub OnSampleExtensionLoad(
ByVal sender As Object, ByVal e As EventArgs)
RaiseEvent SampleExtensionLoad(sender, e)
End Sub
' Event handler to call My.SampleExtensionLoad event.
Private Sub MyApplication_SampleExtensionLoad(
ByVal sender As Object, ByVal e As System.EventArgs
) Handles Me.SampleExtensionLoad
End Sub
End Class
End Namespace
Рекомендации по проектированию
При разработке расширений в My пространстве имен используйте следующие рекомендации, чтобы свести к минимуму расходы на обслуживание компонентов расширения:
- Включите только логику расширения. Логика
My, включенная в расширение пространства имен, должна содержать только код, необходимый для предоставления необходимых функций вMyпространстве имен. Так как расширение будет находиться в пользовательских проектах в качестве исходного кода, обновление компонента расширения влечет за собой высокую стоимость обслуживания и следует избегать, если это возможно. - Свести к минимуму предположения о проекте. При создании расширений пространства имен
Myне следует предполагать наличие набора ссылок, импорта на уровне проекта или конкретных настроек компилятора (например,Option Strictотключен). Вместо этого сведите к минимуму зависимости и полностью укажите все ссылки на тип с помощью ключевогоGlobalслова. Кроме того, убедитесь, что расширение компилируется вместе сOption Strictтем, чтобы свести к минимуму ошибки в расширении. - Изолируйте код расширения. Размещение кода в одном файле упрощает развертывание расширения в виде шаблона элемента Visual Studio. Дополнительные сведения см. в разделе "Упаковка и развертывание расширений" далее в этом разделе. Размещение всего кода расширения пространства имен в одном файле или отдельной папке в проекте также поможет пользователям найти расширение пространства имен.
Проектирование библиотек классов для My
Как и в большинстве объектных моделей, некоторые шаблоны проектирования хорошо работают в My пространстве имен, а другие — нет. При проектировании расширения в My пространстве имен следует учитывать следующие принципы:
- Методы без отслеживания состояния. Методы в
Myпространстве имен должны предоставлять полное решение для конкретной задачи. Убедитесь, что значения параметров, передаваемые методу, предоставляют все входные данные, необходимые для выполнения конкретной задачи. Избегайте создания методов, которые зависят от предыдущего состояния, например открытых подключений к ресурсам. - Глобальные инстанции. Единственное состояние, которое сохраняется в
Myпространстве имен, является глобальным для проекта. Например,My.Application.Infoинкапсулирует состояние, общее для всего приложения. - Простые типы параметров. Не используйте сложные типы параметров. Вместо этого создайте методы, которые либо не принимают входные данные параметров, либо которые принимают простые типы входных данных, такие как строки, примитивные типы и т. д.
- Фабричные методы. Некоторые типы по своей природе сложно инстанцировать. Предоставление методов фабрики в качестве расширений
Myв пространстве имен позволяет более просто обнаруживать и использовать типы, которые попадают в эту категорию. Пример метода фабрики, который хорошо работает, — этоMy.Computer.FileSystem.OpenTextFileReader. В .NET Framework доступно несколько типов потоков. Указывая текстовые файлы,OpenTextFileReaderпомогает пользователю понять, какой поток следует использовать.
Эти рекомендации не исключают общие принципы проектирования для библиотек классов. Скорее, они являются рекомендациями, оптимизированными для разработчиков, использующих Visual Basic и My пространство имен. Общие принципы проектирования для создания библиотек классов см. в руководстве по проектированию платформы.
Упаковка и развертывание расширений
Можно включить расширения пространства имен My в шаблон проекта Visual Studio или упаковать и развернуть их в виде шаблона элемента Visual Studio. Упаковав расширения пространства имен My в качестве шаблона элемента Visual Studio, вы можете воспользоваться дополнительными возможностями, предоставляемых Visual Basic. Эти возможности позволяют добавить расширение, если проект ссылается на определенную сборку, или позволить пользователям явное добавление расширения пространства имен с помощью страницы My.
Дополнительные сведения о развертывании My расширений пространства имен см. в статье "Упаковка и развертывание пользовательских расширений".