Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A névtér kiterjesztése a
A My Visual Basic névtere olyan tulajdonságokat és metódusokat tesz elérhetővé, amelyek lehetővé teszik a .NET-keretrendszer előnyeinek egyszerű kihasználását. A My névtér leegyszerűsíti a gyakori programozási problémákat, és gyakran egyetlen kódsorra csökkenti a nehéz feladatokat. Emellett a My névtér teljes mértékben bővíthető, így testre szabhatja a viselkedését My , és új szolgáltatásokat adhat hozzá a hierarchiához, hogy igazodjon az adott alkalmazás igényeihez. Ez a témakör azt ismerteti, hogyan szabhatja testre a My névtér meglévő tagjait, és hogyan adhat hozzá saját egyéni osztályokat a My névtérhez.
Meglévő My névtértagok testreszabása
A My Visual Basic névtere gyakran használt információkat tesz elérhetővé az alkalmazásról, a számítógépről és egyebekről. A névtérben lévő objektumok teljes listáját a MySaját hivatkozás című témakörben találja. Előfordulhat, hogy testre kell szabnia a My névtér meglévő tagjait, hogy jobban megfeleljenek az alkalmazás igényeinek. A My névtérben lévő, nem írásvédett objektum bármely tulajdonságát egyéni értékre lehet állítani.
Tegyük fel például, hogy gyakran használja a My.User objektumot az alkalmazást futtató felhasználó aktuális biztonsági környezetének elérésére. A vállalat azonban egy egyéni felhasználói objektumot használ, amely további információkat és képességeket tesz elérhetővé a vállalaton belüli felhasználók számára. Ebben a forgatókönyvben lecserélheti az alapértelmezett tulajdonság értéket a saját egyéni fő objektumának egy példányára, ahogyan az az alábbi példában látható.
My.User.CurrentPrincipal = CustomPrincipal
Az objektum tulajdonságának CurrentPrincipalMy.User beállítása megváltoztatja az identitást, amely alatt az alkalmazás fut. Az My.User objektum viszont az újonnan megadott felhasználó adatait adja vissza.
Tagok hozzáadása objektumokhoz My
A My.Application és My.Computer által visszaadott típusok Partial osztályokként vannak definiálva. Ezért kiterjesztheti a My.Application és My.Computer objektumokat egy Partial vagy MyApplication nevű MyComputer osztály létrehozásával. Az osztály nem lehet Private osztály. Ha az My osztályt a névtér részeként adja meg, olyan tulajdonságokat és metódusokat adhat hozzá, amelyek az My.Application vagy My.Computer objektumokkal együtt lesznek.
Az alábbi példa egy objektumhoz DnsServerIPAddresses elnevezett My.Computer tulajdonságot ad hozzá:
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
Egyéni objektumok hozzáadása a My névtérhez
Bár a My névtér számos gyakori programozási feladathoz kínál megoldást, előfordulhat, hogy olyan feladatokat talál, amelyeket a My névtér nem foglalkozik. Az alkalmazás például hozzáférhet a felhasználói adatok egyéni címtárszolgáltatásaihoz, vagy az alkalmazás olyan szerelvényeket használhat, amelyek alapértelmezés szerint nincsenek telepítve a Visual Basicben. A névteret kibővítheti úgy My , hogy egyéni megoldásokat is tartalmazzon a környezetre jellemző gyakori feladatokra. A My névtér egyszerűen bővíthető új tagok hozzáadásával a növekvő alkalmazásigényeknek megfelelően. Emellett a névtérbővítményeket más fejlesztőknek is üzembe helyezheti My Visual Basic-sablonként.
Tagok hozzáadása a My névtérhez
Mivel a My egy névtér, mint bármely másik névtér, hozzáadhat felső szintű tulajdonságokat úgy, hogy hozzáad egy modult, és megad egy NamespaceMy-t. Jegyzetelje a modult az HideModuleName alábbi példában látható attribútummal. Az HideModuleName attribútum biztosítja, hogy az IntelliSense ne jelenítse meg a modul nevét, amikor megjeleníti a névtér tagjait My .
Namespace My
<HideModuleName()>
Module MyCustomModule
End Module
End Namespace
Ha tagokat szeretne hozzáadni a My névtérhez, szükség szerint adjon hozzá tulajdonságokat a modulhoz. Minden tulajdonság esetén, amelyet a My névtérhez adnak hozzá, hozzon létre egy privát mezőt a ThreadSafeObjectProvider(Of T) típusú, ahol a típus az egyéni tulajdonság által visszaadott típus. Ez a mező arra szolgál, hogy szálbiztos objektumpéldányokat hozzon létre, amelyeket a tulajdonság a GetInstance metódus meghívásával ad vissza. Ennek eredményeképpen minden olyan szál, amely hozzáfér a kiterjesztett tulajdonsághoz, megkapja a visszaadott típus saját példányát. Az alábbi példa egy `SampleExtension` nevű tulajdonságot, amely `SampleExtension` típusú, hozzáad a `My` névtérhez.
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
Események hozzáadása egyéni My objektumokhoz
A My.Application objektumot használhatja az egyéni My objektumok eseményeinek közzétételére a MyApplication névtérben lévő My részleges osztály kiterjesztésével. Windows-alapú projektek esetén a Megoldáskezelőben duplán kattinthat a projekt Saját projekt csomópontjára. A Visual Basic Project Designerben kattintson az Alkalmazás fülre, majd az Alkalmazásesemények megtekintése gombra. Létrejön egy ApplicationEvents.vb nevű új fájl. A MyApplication osztály kiterjesztéséhez a következő kódot tartalmazza.
Namespace My
Partial Friend Class MyApplication
End Class
End Namespace
Hozzáadhat eseménykezelőket az egyéni My objektumaihoz azáltal, hogy egyéni eseménykezelőket ad hozzá az MyApplication osztályhoz. Az egyéni események lehetővé teszik olyan kód hozzáadását, amely egy eseménykezelő hozzáadásakor, eltávolításakor vagy az esemény létrehozásakor lesz végrehajtva. Vegye figyelembe, hogy az AddHandler egyéni események kódja csak akkor fut, ha egy felhasználó hozzáadja az esemény kezeléséhez szükséges kódot. Tegyük fel például, hogy az SampleExtension előző szakasz objektumának van egy Load olyan eseménye, amelyhez egyéni eseménykezelőt szeretne hozzáadni. Az alábbi példakód egy egyéni eseménykezelőt mutat be, SampleExtensionLoad, amelyet meghívnak az My.SampleExtension.Load esemény bekövetkezésekor. Amikor az új My.SampleExtensionLoad esemény kezeléséhez kódot ad hozzá, az AddHandler egyéni eseménykód része lesz végrehajtva. A MyApplication_SampleExtensionLoad metódus szerepel a kód példájában, amely egy eseménykezelő példáját jeleníti meg, amely az My.SampleExtensionLoad eseményt kezeli. Vegye figyelembe, hogy az SampleExtensionLoad esemény akkor lesz elérhető, ha a ApplicationEvents.vb fájl szerkesztésekor a Kódszerkesztő fölött a bal oldali legördülő listában a Saját alkalmazásesemények lehetőséget választja.
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
Tervezési irányelvek
Amikor bővítményeket fejleszt a My névtérhez, az alábbi irányelvekkel minimalizálhatja a bővítményösszetevők karbantartási költségeit:
- Csak a bővítménylogikát adja meg. A
Mynévtérbővítményben szereplő logikának csak azokat a kódokat kell tartalmaznia, amelyek aMynévtérben szükséges funkciók eléréséhez elengedhetetlenek. Mivel a bővítmény forráskódként a felhasználói projektekben fog elhelyezkedni, a bővítmény összetevőjének frissítése magas karbantartási költséggel jár, és ha lehetséges, el kell kerülni. - A projektfeltevések minimalizálása. Amikor létrehozza a
Mynévtér kiterjesztéseit, ne feltételezze a hivatkozások, a projektszintű importálások vagy a fordító konkrét beállításainak meglétét (példáulOption Strictkikapcsolva). Ehelyett minimalizálja a függőségeket, és teljes mértékben minősítse az összes típushivatkozást aGlobalkulcsszó használatával. Emellett győződjön meg arról, hogy a bővítmény be vanOption Strictkapcsolva a bővítmény hibáinak minimalizálása érdekében. - A bővítménykód elkülönítése. Ha a kódot egyetlen fájlba helyezi, a bővítmény egyszerűen üzembe helyezhető Visual Studio-elemsablonként. További információ: "Bővítmények csomagolása és üzembe helyezése" a jelen témakör későbbi részében. Ha az
Myösszes névtérkiterjesztési kódot egyetlen fájlba vagy egy külön mappába helyezi egy projektben, az segít a felhasználóknak megtalálni a névtérbővítménytMy.
Osztálykönyvtárak tervezése My
A legtöbb objektummodellhez hasonlóan egyes tervezési minták is jól működnek a My névtérben, míg mások nem. A névtér bővítményének My tervezésekor vegye figyelembe az alábbi alapelveket:
- Állapot nélküli metódusok. A névtér metódusainak
Myteljes megoldást kell nyújtaniuk egy adott tevékenységre. Győződjön meg arról, hogy a metódusnak átadott paraméterértékek biztosítják az adott feladat elvégzéséhez szükséges összes bemenetet. Ne hozzon létre olyan metódusokat, amelyek korábbi állapotra támaszkodnak, például nyílt kapcsolatokat létesítenek az erőforrásokhoz. - Globális példányok. A
Mynévtérben fenntartott egyetlen állapot a projekt számára globális. Például aMy.Application.Infokapszulázza az alkalmazás egészében megosztott állapotot. - Egyszerű paramétertípusok. Az összetett paramétertípusok elkerülésével a dolgok egyszerűek maradnak. Ehelyett hozzon létre olyan metódusokat, amelyek vagy nem vesznek fel paraméterbemenetet, vagy olyan egyszerű bemeneti típusokat használnak, mint a sztringek, a primitív típusok stb.
- Gyári módszerek. Egyes típusokat feltétlenül nehéz példányosítani. Ha gyári metódusokat biztosít a
Mynévtér kiterjesztéseként, könnyebben felderítheti és felhasználhatja az ebbe a kategóriába tartozó típusokat. Példa egy jól működő gyári módszerreMy.Computer.FileSystem.OpenTextFileReader. A .NET-keretrendszerben számos streamtípus érhető el. A szövegfájlok konkrét megadásával aOpenTextFileReaderfelhasználó könnyebben megértheti, hogy melyik streamet szeretné használni.
Ezek az irányelvek nem zárják ki az osztálykódtárak általános tervezési alapelveit. Inkább olyan javaslatok, amelyek a Visual Basicet és a My névteret használó fejlesztők számára vannak optimalizálva. Az osztálykódtárak létrehozásának általános tervezési alapelveit a Keretrendszer tervezési irányelvei című témakörben talál.
Bővítmények csomagolása és üzembe helyezése
My Felvehet névtérbővítményeket egy Visual Studio-projektsablonba, vagy csomagolhatja a bővítményeket, és üzembe helyezheti őket Visual Studio-elemsablonként. Ha a My névtérbővítményeket Visual Studio elemtémaként csomagolja, kihasználhatja a Visual Basic által biztosított további képességeket. Ezek a képességek lehetővé teszik egy bővítmény hozzáadását, ha egy projekt egy adott szerelvényre hivatkozik, vagy lehetővé teszi a felhasználók számára, hogy explicit módon hozzáadják a névtérbővítményt My a Visual Basic Project Designer Saját bővítmények lapján.
A névtérbővítmények üzembe helyezéséről My további információt az Egyéni saját bővítmények csomagolása és üzembe helyezése című témakörben talál.