Megosztás a következőn keresztül:


A névtér kiterjesztése a My Visual Basicben

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 My névtérbővítményben szereplő logikának csak azokat a kódokat kell tartalmaznia, amelyek a My né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 My né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ául Option Strict kikapcsolva). Ehelyett minimalizálja a függőségeket, és teljes mértékben minősítse az összes típushivatkozást a Global kulcsszó használatával. Emellett győződjön meg arról, hogy a bővítmény be van Option Strict kapcsolva 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ényt My .

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 My teljes 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 My névtérben fenntartott egyetlen állapot a projekt számára globális. Például a My.Application.Info kapszulá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 My né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ódszerre My.Computer.FileSystem.OpenTextFileReader. A .NET-keretrendszerben számos streamtípus érhető el. A szövegfájlok konkrét megadásával a OpenTextFileReader felhaszná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.

Lásd még