My
Utöka namnområdet i Visual Basic
Namnområdet My
i Visual Basic visar egenskaper och metoder som gör att du enkelt kan dra nytta av kraften i .NET Framework. Namnområdet My
förenklar vanliga programmeringsproblem, vilket ofta minskar en svår uppgift till en enda kodrad. Dessutom My
är namnområdet helt utökningsbart så att du kan anpassa beteendet My
för och lägga till nya tjänster i hierarkin för att anpassa till specifika programbehov. I det här avsnittet beskrivs både hur du anpassar befintliga medlemmar i My
namnområdet och hur du lägger till egna anpassade klasser i My
namnområdet.
Anpassa befintliga My
namnområdesmedlemmar
Namnområdet My
i Visual Basic visar information som används ofta om ditt program, din dator med mera. En fullständig lista över objekten My
i namnområdet finns i Min referens. Du kan behöva anpassa befintliga medlemmar i My
namnområdet så att de bättre matchar programmets behov. Alla egenskaper för ett objekt i My
namnområdet som inte är skrivskyddade kan anges till ett anpassat värde.
Anta till exempel att du ofta använder My.User
objektet för att komma åt den aktuella säkerhetskontexten för den användare som kör ditt program. Företaget använder dock ett anpassat användarobjekt för att exponera ytterligare information och funktioner för användare i företaget. I det här scenariot kan du ersätta standardvärdet för My.User.CurrentPrincipal
egenskapen med en instans av ditt eget objekt för anpassat huvudnamn, som du ser i följande exempel:
My.User.CurrentPrincipal = CustomPrincipal
Om du CurrentPrincipal
anger egenskapen för My.User
objektet ändras identiteten som programmet körs under. Objektet My.User
returnerar i sin tur information om den nyligen angivna användaren.
Lägga till medlemmar i My
objekt
De typer som returneras från My.Application
och My.Computer
definieras som Partial
klasser. Därför kan du utöka objekten My.Application
och My.Computer
genom att skapa en Partial
klass med namnet MyApplication
eller MyComputer
. Klassen kan inte vara en Private
klass. Om du anger klassen som en del av My
namnområdet kan du lägga till egenskaper och metoder som ska ingå i objekten My.Application
eller My.Computer
.
I följande exempel läggs en egenskap med namnet DnsServerIPAddresses
till objektet 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
Lägga till anpassade objekt i My
namnområdet
My
Även om namnområdet innehåller lösningar för många vanliga programmeringsuppgifter kan du stöta på uppgifter som My
namnområdet inte adresserar. Ditt program kan till exempel komma åt anpassade katalogtjänster för användardata, eller så kan programmet använda sammansättningar som inte är installerade som standard med Visual Basic. Du kan utöka My
namnområdet till att omfatta anpassade lösningar för vanliga uppgifter som är specifika för din miljö. Namnområdet My
kan enkelt utökas för att lägga till nya medlemmar för att uppfylla växande programbehov. Dessutom kan du distribuera namnområdestillägg My
till andra utvecklare som en Visual Basic-mall.
Lägga till medlemmar i My
namnområdet
Eftersom My
är ett namnområde som alla andra namnområden kan du lägga till egenskaper på den översta nivån genom att bara lägga till en modul och ange en Namespace
av My
. Kommentera modulen med HideModuleName
attributet enligt följande exempel. Attributet HideModuleName
ser till att IntelliSense inte visar modulnamnet när det visar medlemmarna i My
namnområdet.
Namespace My
<HideModuleName()>
Module MyCustomModule
End Module
End Namespace
Om du vill lägga till medlemmar i My
namnområdet lägger du till egenskaper efter behov i modulen. För varje egenskap som läggs till i My
namnområdet lägger du till ett privat fält av typen ThreadSafeObjectProvider(Of T)
, där typen är den typ som returneras av din anpassade egenskap. Det här fältet används för att skapa trådsäkra objektinstanser som ska returneras av egenskapen genom att anropa GetInstance
metoden. Därför får varje tråd som kommer åt den utökade egenskapen sin egen instans av den returnerade typen. I följande exempel läggs en egenskap med namnet SampleExtension
som är av typen SampleExtension
till My
namnområdet:
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
Lägga till händelser i anpassade My
objekt
Du kan använda My.Application
objektet för att exponera händelser för dina anpassade My
objekt genom att utöka den MyApplication
partiella klassen i My
namnområdet. För Windows-baserade projekt kan du dubbelklicka på noden Mitt projekt i för projektet i Solution Explorer. I Visual Basic Project Designer klickar du på fliken Program och klickar sedan på knappen Visa programhändelser. En ny fil med namnet ApplicationEvents.vb skapas. Den innehåller följande kod för att MyApplication
utöka klassen:
Namespace My
Partial Friend Class MyApplication
End Class
End Namespace
Du kan lägga till händelsehanterare för dina anpassade My
objekt genom att lägga till anpassade händelsehanterare i MyApplication
klassen. Med anpassade händelser kan du lägga till kod som körs när en händelsehanterare läggs till, tas bort eller händelsen aktiveras. Observera att AddHandler
koden för en anpassad händelse endast körs om kod läggs till av en användare för att hantera händelsen. Anta till exempel att SampleExtension
objektet från föregående avsnitt har en Load
händelse som du vill lägga till en anpassad händelsehanterare för. I följande kodexempel visas en anpassad händelsehanterare med namnet SampleExtensionLoad
som anropas när händelsen My.SampleExtension.Load
inträffar. När kod läggs till för att hantera den nya My.SampleExtensionLoad
händelsen körs delen av den AddHandler
här anpassade händelsekoden. Metoden MyApplication_SampleExtensionLoad
ingår i kodexemplet för att visa ett exempel på en händelsehanterare som hanterar My.SampleExtensionLoad
händelsen. Observera att händelsen SampleExtensionLoad
blir tillgänglig när du väljer alternativet Mina programhändelser i den vänstra listrutan ovanför kodredigeraren när du redigerar filen 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
Designriktlinjer
När du utvecklar tillägg till My
namnområdet använder du följande riktlinjer för att minimera underhållskostnaderna för tilläggskomponenterna:
- Inkludera endast tilläggslogik. Logiken som ingår i
My
namnområdestillägget bör endast innehålla den kod som behövs för att exponera de nödvändiga funktionerna iMy
namnområdet. Eftersom tillägget kommer att finnas i användarprojekt som källkod medför uppdatering av tilläggskomponenten en hög underhållskostnad och bör undvikas om möjligt. - Minimera projektantaganden. När du skapar dina tillägg för
My
namnområdet ska du inte anta en uppsättning referenser, importer på projektnivå eller specifika kompilatorinställningar (till exempelOption Strict
av). Minimera i stället beroenden och fullständigt kvalificera alla typreferenser med hjälp av nyckelordetGlobal
. Se också till att tillägget kompileras medOption Strict
på för att minimera fel i tillägget. - Isolera tilläggskoden. Om du placerar koden i en enda fil kan du enkelt distribuera tillägget som en Visual Studio-objektmall. Mer information finns i "Paketera och distribuera tillägg" senare i det här avsnittet. Genom att placera all namnområdestilläggskod
My
i en enda fil eller en separat mapp i ett projekt kan användarna också hitta namnområdestilläggetMy
.
Utforma klassbibliotek för My
Som med de flesta objektmodeller fungerar vissa designmönster bra i My
namnområdet och andra inte. När du utformar ett tillägg till My
namnområdet bör du tänka på följande principer:
- Tillståndslösa metoder. Metoder i
My
namnområdet bör ge en fullständig lösning på en specifik uppgift. Se till att parametervärdena som skickas till metoden innehåller alla indata som krävs för att slutföra den specifika aktiviteten. Undvik att skapa metoder som förlitar sig på tidigare tillstånd, till exempel öppna anslutningar till resurser. - Globala instanser. Det enda tillstånd som underhålls i
My
namnområdet är globalt för projektet. Kapslar till exempelMy.Application.Info
in tillstånd som delas i hela programmet. - Enkla parametertyper. Håll det enkelt genom att undvika komplexa parametertyper. Skapa i stället metoder som antingen inte tar några parameterindata eller som använder enkla indatatyper som strängar, primitiva typer och så vidare.
- Fabriksmetoder. Vissa typer är nödvändigtvis svåra att instansiera. Genom att tillhandahålla fabriksmetoder som tillägg till
My
namnområdet kan du enklare identifiera och använda typer som tillhör den här kategorin. Ett exempel på en fabriksmetod som fungerar bra ärMy.Computer.FileSystem.OpenTextFileReader
. Det finns flera tillgängliga strömtyper i .NET Framework. Genom att ange textfiler specifikt hjälperOpenTextFileReader
det användaren att förstå vilken ström som ska användas.
Dessa riktlinjer utesluter inte allmänna designprinciper för klassbibliotek. I stället är de rekommendationer som är optimerade för utvecklare som använder Visual Basic och My
namnområdet. Allmänna designprinciper för att skapa klassbibliotek finns i Riktlinjer för ramverksdesign.
Paketera och distribuera tillägg
Du kan inkludera My
namnområdestillägg i en Visual Studio-projektmall, eller så kan du paketera dina tillägg och distribuera dem som en Visual Studio-objektmall. När du paketerar namnområdestilläggen My
som en Visual Studio-objektmall kan du dra nytta av ytterligare funktioner som tillhandahålls av Visual Basic. Med de här funktionerna kan du inkludera ett tillägg när ett projekt refererar till en viss sammansättning eller göra det möjligt för användare att uttryckligen lägga till ditt My
namnområdestillägg med hjälp av sidan Mina tillägg i Visual Basic Project Designer.
Mer information om hur du distribuerar My
namnområdestillägg finns i Paketera och distribuera anpassade mina tillägg.