Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Extensión del espacio de nombres
El My
espacio de nombres de Visual Basic expone propiedades y métodos que permiten aprovechar fácilmente la eficacia de .NET Framework. El My
espacio de nombres simplifica los problemas comunes de programación, a menudo reduciendo una tarea difícil a una sola línea de código. Además, el My
espacio de nombres es totalmente extensible para que pueda personalizar el comportamiento de My
y agregar nuevos servicios a su jerarquía para adaptarse a necesidades específicas de la aplicación. En este tema se describe cómo personalizar los miembros existentes del My
espacio de nombres y cómo agregar sus propias clases personalizadas al My
espacio de nombres.
Personalización de los miembros del espacio de nombres My
existentes
El My
espacio de nombres de Visual Basic expone información que se usa con frecuencia sobre la aplicación, el equipo y mucho más. Para obtener una lista completa de los objetos del My
espacio de nombres, vea Mi referencia. Es posible que tenga que personalizar los miembros existentes del My
espacio de nombres para que coincidan mejor con las necesidades de la aplicación. Cualquier propiedad de un objeto del My
espacio de nombres que no sea de solo lectura se puede establecer en un valor personalizado.
Por ejemplo, supongamos que usa con frecuencia el My.User
objeto para acceder al contexto de seguridad actual para el usuario que ejecuta la aplicación. Sin embargo, la empresa usa un objeto de usuario personalizado para exponer información adicional y funcionalidades para los usuarios de la empresa. En este escenario, puede reemplazar el valor predeterminado de la My.User.CurrentPrincipal
propiedad por una instancia de su propio objeto principal personalizado, como se muestra en el ejemplo siguiente:
My.User.CurrentPrincipal = CustomPrincipal
Establecer la CurrentPrincipal
propiedad en el My.User
objeto cambia la identidad en la que se ejecuta la aplicación. El My.User
objeto, a su vez, devuelve información sobre el usuario recién especificado.
Agregar miembros a My
objetos
Los tipos devueltos de My.Application
y My.Computer
se definen como Partial
clases. Por lo tanto, puede extender los objetos My.Application
y My.Computer
creando una clase denominada Partial
o MyApplication
. La clase no puede ser una Private
clase . Si especifica la clase como parte del My
espacio de nombres, puede agregar propiedades y métodos que se incluirán con los My.Application
objetos o My.Computer
.
En el ejemplo siguiente se agrega una propiedad denominada DnsServerIPAddresses
al My.Computer
objeto :
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
Adición de objetos personalizados al namespace My
Aunque el My
espacio de nombres proporciona soluciones para muchas tareas de programación comunes, es posible que encuentre tareas que el My
espacio de nombres no direccione. Por ejemplo, la aplicación podría tener acceso a servicios de directorio personalizados para los datos de usuario o la aplicación podría usar ensamblados que no están instalados de forma predeterminada con Visual Basic. Puede ampliar el My
espacio de nombres para incluir soluciones personalizadas a tareas comunes específicas de su entorno. El My
espacio de nombres se puede ampliar fácilmente para agregar nuevos miembros para satisfacer las crecientes necesidades de la aplicación. Además, puede implementar las extensiones del espacio de nombres My
para otros desarrolladores como una plantilla de Visual Basic.
Adición de miembros al espacio de nombres My
Dado que My
es un espacio de nombres como cualquier otro espacio de nombres, puede agregarle propiedades de nivel superior simplemente agregando un módulo y especificando un Namespace
de My
. Anote el módulo con el HideModuleName
atributo tal como se muestra en el ejemplo siguiente. El HideModuleName
atributo garantiza que IntelliSense no mostrará el nombre del módulo cuando muestre los miembros del My
espacio de nombres.
Namespace My
<HideModuleName()>
Module MyCustomModule
End Module
End Namespace
Para agregar miembros al My
espacio de nombres, agregue propiedades según sea necesario al módulo. Para cada propiedad agregada al My
espacio de nombres, agregue un campo privado de tipo ThreadSafeObjectProvider(Of T)
, donde el tipo es el tipo devuelto por la propiedad personalizada. Este campo se usa para crear instancias de objetos seguros para subprocesos que la propiedad devolverá mediante la llamada al método GetInstance
. Como resultado, cada subproceso que accede a la propiedad extendida recibe su propia instancia del tipo devuelto. En el ejemplo siguiente se agrega una propiedad denominada SampleExtension
que es de tipo SampleExtension
al My
espacio de nombres:
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
Adición de eventos a objetos personalizados My
Puede usar el objeto My.Application
para exponer los eventos de los objetos personalizados My
extendiendo la clase parcial MyApplication
en el espacio de nombres My
. En el caso de los proyectos basados en Windows, puede hacer doble clic en el nodo Mi proyecto del proyecto en el Explorador de soluciones. En el Diseñador de proyectos de Visual Basic, haga clic en la pestaña Aplicación y, a continuación, haga clic en el botón Ver eventos de aplicación . Se creará un nuevo archivo denominado ApplicationEvents.vb . Contiene el código siguiente para extender la MyApplication
clase :
Namespace My
Partial Friend Class MyApplication
End Class
End Namespace
Puede agregar controladores de eventos para los objetos personalizados My
agregando controladores de eventos personalizados a la MyApplication
clase . Los eventos personalizados permiten agregar código que se ejecutará cuando se agregue o quite un manejador de eventos, o cuando se genere el evento. Tenga en cuenta que el AddHandler
código de un evento personalizado solo se ejecuta si un usuario agrega código para controlar el evento. Por ejemplo, considere que el SampleExtension
objeto de la sección anterior tiene un Load
evento para el que desea agregar un controlador de eventos personalizado. En el ejemplo de código siguiente se muestra un controlador de eventos personalizado denominado SampleExtensionLoad
que se invocará cuando se produzca el My.SampleExtension.Load
evento. Cuando se agrega código para controlar el nuevo My.SampleExtensionLoad
evento, se ejecuta la AddHandler
parte de este código de evento personalizado. El MyApplication_SampleExtensionLoad
método se incluye en el ejemplo de código para mostrar un ejemplo de un controlador de eventos que controla el My.SampleExtensionLoad
evento. Tenga en cuenta que el SampleExtensionLoad
evento estará disponible al seleccionar la opción Mis eventos de aplicación en la lista desplegable izquierda situada encima del Editor de código al editar el archivo 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
Directrices de diseño
Al desarrollar extensiones en el My
espacio de nombres, use las instrucciones siguientes para ayudar a minimizar los costos de mantenimiento de los componentes de extensión:
- Incluya solo la lógica de la extensión. La lógica incluida en la
My
extensión de espacio de nombres debe incluir solo el código necesario para exponer la funcionalidad necesaria en elMy
espacio de nombres. Dado que la extensión residirá en proyectos de usuario como código fuente, la actualización del componente de extensión incurre en un alto costo de mantenimiento y debe evitarse si es posible. - Minimice las suposiciones del proyecto. Al crear las extensiones del espacio de nombres
My
, no asuma un conjunto de referencias, importaciones de nivel de proyecto o configuraciones de compilador específicas (por ejemplo,Option Strict
desactivada). En su lugar, minimice las dependencias y califique completamente todas las referencias de tipo mediante laGlobal
palabra clave . Además, asegúrese de que la extensión se compila conOption Strict
para minimizar los errores de la extensión. - Aísle el código de la extensión. Colocar el código en un único archivo hace que la extensión se pueda implementar fácilmente como una plantilla de elemento de Visual Studio. Para obtener más información, vea "Empaquetado e implementación de extensiones" más adelante en este tema. Colocar todo el código del espacio de nombres de la extensión
My
en un solo archivo o en una carpeta independiente de un proyecto también ayudará a los usuarios a localizar el espacio de nombres de la extensiónMy
.
Diseño de bibliotecas de clases para My
Como sucede con la mayoría de los modelos de objetos, algunos patrones de diseño funcionan bien en el My
espacio de nombres y otros no. Al diseñar una extensión en el My
espacio de nombres, tenga en cuenta los siguientes principios:
- Métodos sin estado. Los métodos del
My
espacio de nombres deben proporcionar una solución completa a una tarea específica. Asegúrese de que los valores de parámetro que se pasan al método proporcionan toda la entrada necesaria para completar la tarea determinada. Evite crear métodos que se basen en el estado anterior, como las conexiones abiertas a los recursos. - Instancias globales. El único estado que se mantiene en el espacio de nombres
My
es global para el proyecto. Por ejemplo,My.Application.Info
encapsula el estado que se comparte en toda la aplicación. - Tipos de parámetros simples. Mantenga las cosas sencillas evitando tipos de parámetros complejos. En su lugar, cree métodos que no toman ninguna entrada de parámetro o que toman tipos de entrada simples, como cadenas, tipos primitivos, etc.
- Métodos de fábrica. Algunos tipos son necesariamente difíciles de instanciar. Proporcionar Factory Method como extensiones para el espacio de nombres
My
permite detectar y consumir más fácilmente los tipos que se encuentran en esta categoría. Un ejemplo de un método de fábrica que funciona bien esMy.Computer.FileSystem.OpenTextFileReader
. Hay varios tipos de flujo disponibles en .NET Framework.OpenTextFileReader
al especificar archivos de texto específicamente, ayuda al usuario a comprender qué flujo usar.
Estas directrices no excluyen los principios generales de diseño para las bibliotecas de clases. Más bien, son recomendaciones optimizadas para desarrolladores que utilizan Visual Basic y el espacio de nombres My
. Para conocer los principios generales de diseño para crear bibliotecas de clases, consulte Directrices de diseño de marcos.
Empaquetado e implementación de extensiones
Puede incluir extensiones del espacio de nombres My
en una plantilla de proyecto de Visual Studio, o bien puede empaquetar las extensiones e implementarlas como una plantilla de elemento de Visual Studio. Cuando empaquetas tus My
extensiones de espacio de nombres como una plantilla de elemento de Visual Studio, puedes aprovechar las capacidades adicionales proporcionadas por Visual Basic. Estas funcionalidades permiten incluir una extensión cuando un proyecto hace referencia a un ensamblado determinado o permitir que los usuarios agreguen explícitamente la My
extensión de espacio de nombres mediante la página Mis extensiones del Diseñador de proyectos de Visual Basic.
Para obtener más información sobre cómo implementar extensiones de espacio de nombres My
, vea Empaquetado e implementación de extensiones My personalizadas.