Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Estensione dello
Lo My spazio dei nomi in Visual Basic espone proprietà e metodi che consentono di sfruttare facilmente la potenza del .NET Framework. Lo My spazio dei nomi semplifica i problemi di programmazione comuni, riducendo spesso un'attività difficile a una singola riga di codice. Inoltre, lo My spazio dei nomi è completamente estendibile in modo da poter personalizzare il comportamento di My e aggiungere nuovi servizi alla gerarchia per adattarsi a specifiche esigenze dell'applicazione. Questo argomento illustra sia come personalizzare i membri esistenti dello My spazio dei nomi che come aggiungere classi personalizzate allo spazio dei My nomi.
Personalizzazione dei membri esistenti dello spazio dei nomi My
Lo My spazio dei nomi in Visual Basic espone informazioni frequentemente usate sull'applicazione, sul computer e molto altro. Per un elenco completo degli oggetti nello spazio dei My nomi, vedere Riferimenti personali. Potrebbe essere necessario personalizzare i membri esistenti dello spazio dei My nomi in modo che corrispondano meglio alle esigenze dell'applicazione. Qualsiasi proprietà di un oggetto nello spazio dei nomi My, che non è di sola lettura, può essere impostata su un valore personalizzato.
Si supponga, ad esempio, di usare spesso l'oggetto My.User per accedere al contesto di sicurezza corrente per l'utente che esegue l'applicazione. Tuttavia, la società usa un oggetto utente personalizzato per esporre informazioni e funzionalità aggiuntive per gli utenti all'interno dell'azienda. In questo scenario è possibile sostituire il valore predefinito della My.User.CurrentPrincipal proprietà con un'istanza del proprio oggetto principal personalizzato, come illustrato nell'esempio seguente:
My.User.CurrentPrincipal = CustomPrincipal
L'impostazione della CurrentPrincipal proprietà nell'oggetto My.User modifica l'identità con cui viene eseguita l'applicazione. L'oggetto My.User , a sua volta, restituisce informazioni sull'utente appena specificato.
Aggiunta di membri agli oggetti My
I tipi restituiti da My.Application e My.Computer vengono definiti come Partial classi. Pertanto, è possibile estendere gli My.Application oggetti e My.Computer creando una Partial classe denominata MyApplication o MyComputer. La classe non può essere una Private classe . Se si specifica la classe come parte dello spazio dei nomi My, è possibile aggiungere proprietà e metodi che saranno inclusi negli oggetti My.Application o My.Computer in essi.
Nell'esempio seguente viene aggiunta una proprietà denominata DnsServerIPAddresses all'oggetto 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
Aggiunta di oggetti personalizzati allo spazio nomi My
Sebbene lo My spazio dei nomi fornisca soluzioni per molte attività di programmazione comuni, è possibile che si verifichino attività che lo My spazio dei nomi non risolve. Ad esempio, l'applicazione potrebbe accedere ai servizi directory personalizzati per i dati utente oppure l'applicazione potrebbe usare assembly non installati per impostazione predefinita con Visual Basic. È possibile estendere lo My spazio dei nomi in modo da includere soluzioni personalizzate per attività comuni specifiche dell'ambiente. Lo My spazio dei nomi può essere esteso facilmente per aggiungere nuovi membri per soddisfare le esigenze crescenti dell'applicazione. Inoltre, è possibile distribuire le My estensioni dello spazio dei nomi ad altri sviluppatori come modello di Visual Basic.
Aggiunta di membri nello spazio dei nomi My
Poiché My è uno spazio dei nomi come qualsiasi altro spazio dei nomi, è possibile aggiungervi proprietà di primo livello aggiungendo semplicemente un modulo e specificando un Namespace di My. Annotare il modulo con l'attributo HideModuleName come illustrato nell'esempio seguente. L'attributo HideModuleName garantisce che IntelliSense non visualizzi il nome del modulo quando visualizza i membri dello spazio dei My nomi.
Namespace My
<HideModuleName()>
Module MyCustomModule
End Module
End Namespace
Per aggiungere membri al namespace My, aggiungere proprietà al modulo in base alle necessità. Per ogni proprietà aggiunta allo spazio dei nomi My, aggiungere un campo privato di tipo ThreadSafeObjectProvider(Of T), dove il tipo è quello restituito dalla proprietà personalizzata. Questo campo viene utilizzato per creare istanze di oggetti thread-safe da restituire dalla proprietà chiamando il GetInstance metodo . Di conseguenza, ogni thread che accede alla proprietà estesa riceve la propria istanza del tipo restituito. Nell'esempio seguente viene aggiunta una proprietà denominata SampleExtension di tipo SampleExtension allo spazio dei nomi 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
Aggiungere eventi a oggetti personalizzati My
È possibile usare l'oggetto My.Application per esporre eventi per gli oggetti personalizzati My estendendo la classe parziale MyApplication nello spazio dei nomi My. Per i progetti basati su Windows, è possibile fare doppio clic sul nodo Progetto personale in per il progetto in Esplora soluzioni. Nella Progettazione progetto di Visual Basic, fare clic sulla scheda Applicazione e quindi sul pulsante Visualizza eventi applicazione. Verrà creato un nuovo file denominato ApplicationEvents.vb . Contiene il codice seguente per estendere la MyApplication classe :
Namespace My
Partial Friend Class MyApplication
End Class
End Namespace
È possibile aggiungere gestori eventi per gli oggetti personalizzati My aggiungendo gestori eventi personalizzati alla MyApplication classe . Gli eventi personalizzati consentono di aggiungere codice che verrà eseguito quando viene aggiunto, rimosso o generato un gestore eventi. Si noti che il AddHandler codice per un evento personalizzato viene eseguito solo se il codice viene aggiunto da un utente per gestire l'evento. Si consideri, ad esempio, che l'oggetto SampleExtension della sezione precedente abbia un Load evento per cui si vuole aggiungere un gestore eventi personalizzato. Nell'esempio di codice seguente viene illustrato un gestore eventi personalizzato denominato SampleExtensionLoad che verrà richiamato quando si verifica l'evento My.SampleExtension.Load . Quando viene aggiunto codice per gestire il nuovo My.SampleExtensionLoad evento, viene eseguita la AddHandler parte di questo codice evento personalizzato. Il MyApplication_SampleExtensionLoad metodo è incluso nell'esempio di codice per mostrare un esempio di gestore eventi che gestisce l'evento My.SampleExtensionLoad . Si noti che l'evento SampleExtensionLoad sarà disponibile quando si seleziona l'opzione Eventi applicazione personale nell'elenco a discesa a sinistra sopra l'editor di codice quando si modifica il file 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
Linee guida per la progettazione
Quando si sviluppano estensioni nello My spazio dei nomi, usare le linee guida seguenti per ridurre al minimo i costi di manutenzione dei componenti dell'estensione:
- Includere solo la logica di estensione. La logica inclusa nell'estensione
Mydello spazio dei nomi deve includere solo il codice necessario per esporre le funzionalità richieste nello spazio dei nomiMy. Poiché l'estensione risiederà nei progetti utente come codice sorgente, l'aggiornamento del componente di estensione comporta un costo elevato di manutenzione e deve essere evitato, se possibile. - Ridurre al minimo i presupposti del progetto. Quando crei le tue estensioni dello spazio dei nomi
My, non dare per scontato un set di riferimenti, importazioni a livello di progetto o impostazioni specifiche del compilatore (ad esempio, quandoOption Strictè impostato su disattivato). Invece, riduci al minimo le dipendenze e qualifica completamente tutti i riferimenti ai tipi usando la parola chiaveGlobal. Assicurarsi inoltre che l'estensione venga compilata conOption Stricton per ridurre al minimo gli errori nell'estensione. - Isolare il codice di estensione. L'inserimento del codice in un singolo file rende l'estensione facilmente distribuibile come modello di elemento di Visual Studio. Per altre informazioni, vedere "Creazione di pacchetti e distribuzione di estensioni" più avanti in questo argomento. L'inserimento di tutto il codice di
Myestensione dello spazio dei nomi in un singolo file, o in una cartella separata in un progetto, aiuterà gli utenti a individuare l'estensioneMydello spazio dei nomi.
Progettazione di librerie di classi per My
Come succede con la maggior parte dei modelli di oggetti, alcuni modelli di progettazione funzionano bene nello spazio dei nomi My e altri no. Quando si progetta un'estensione per lo My spazio dei nomi, considerare i principi seguenti:
- Metodi senza stato. I metodi nello
Myspazio dei nomi devono fornire una soluzione completa a un'attività specifica. Assicurarsi che i valori dei parametri passati al metodo forniscano tutto l'input necessario per completare l'attività specifica. Evitare di creare metodi che si basano sullo stato precedente, ad esempio le connessioni aperte alle risorse. - Istanze globali. L'unico stato mantenuto nello
Myspazio dei nomi è globale per il progetto. Ad esempio,My.Application.Infoincapsula lo stato condiviso in tutta l'applicazione. - Tipi di parametri semplici. Tenere le cose semplici evitando tipi di parametri complessi. Creare invece metodi che non accettano input di parametri o che accettano tipi di input semplici, ad esempio stringhe, tipi primitivi e così via.
- Metodi di fabbrica Alcuni tipi sono necessariamente difficili da istanziare. La fornitura di metodi factory come estensioni allo
Myspazio dei nomi consente di individuare e utilizzare più facilmente i tipi che rientrano in questa categoria. Un esempio di metodo factory che funziona bene èMy.Computer.FileSystem.OpenTextFileReader. In .NET Framework sono disponibili diversi tipi di flusso. Specificando in modo specifico i file di testo, consenteOpenTextFileReaderall'utente di comprendere quale flusso usare.
Queste linee guida non impediscono principi di progettazione generali per le librerie di classi. Si tratta invece di raccomandazioni ottimizzate per gli sviluppatori che usano Visual Basic e lo My spazio dei nomi . Per i principi di progettazione generali per la creazione di librerie di classi, vedere Linee guida per la progettazione del framework.
Creazione di pacchetti e distribuzione di estensioni
È possibile includere le estensioni dello spazio dei nomi My in un modello di progetto di Visual Studio, oppure impacchettare le vostre estensioni e distribuirle come modello di elemento di Visual Studio. Quando si impacchettano le estensioni dello spazio dei nomi My come modello di elemento di Visual Studio, è possibile sfruttare le funzionalità aggiuntive offerte da Visual Basic. Queste funzionalità consentono di includere un'estensione quando un progetto fa riferimento a un particolare assembly o di permettere agli utenti di aggiungere esplicitamente l'estensione dello spazio dei nomi My utilizzando la pagina Estensioni Personali del Progettista di Progetti di Visual Basic.
Per informazioni dettagliate su come distribuire My le estensioni dello spazio dei nomi, vedere Creazione di pacchetti e distribuzione di estensioni personali personalizzate.
Vedere anche
- Creazione di pacchetti e distribuzione di estensioni personali personalizzate
- Estensione del modello di applicazione visual Basic
- Personalizzazione di quali oggetti sono disponibili in My
- Pagina Estensioni personali, Progettazione progetti
- Pagina Applicazione, Progettista di Progetti (Visual Basic)
- Parziale