Sdílet prostřednictvím


Rozšíření My oboru názvů v jazyce Visual Basic

Obor My názvů v jazyce Visual Basic zveřejňuje vlastnosti a metody, které vám umožní snadno využít výhod rozhraní .NET Framework. Obor My názvů zjednodušuje běžné programovací problémy, často snižuje obtížné úlohy na jeden řádek kódu. Kromě toho je obor názvů plně rozšiřitelný, My takže můžete přizpůsobit chování My a přidat nové služby do své hierarchie tak, aby se přizpůsobily konkrétním potřebám aplikace. Toto téma popisuje, jak přizpůsobit existující členy My oboru názvů a jak přidat vlastní třídy do My oboru názvů.

Úprava stávajících My členů oboru názvů

Obor My názvů v jazyce Visual Basic zveřejňuje často používané informace o vaší aplikaci, počítači a dalších. Seznam objektů v rámci názvového prostoru naleznete v My dokumentu Moje reference. Možná budete muset přizpůsobit existující členy My oboru názvů, aby lépe odpovídaly potřebám vaší aplikace. Libovolnou vlastnost objektu My v oboru názvů, který není jen pro čtení, lze nastavit na vlastní hodnotu.

Předpokládejme například, že objekt často používáte My.User pro přístup k aktuálnímu kontextu zabezpečení pro uživatele, který spouští vaši aplikaci. Vaše společnost ale používá vlastní objekt uživatele k zveřejnění dalších informací a možností pro uživatele v rámci společnosti. V tomto scénáři můžete výchozí hodnotu vlastnosti nahradit instancí vlastního objektu principal, jak je znázorněno v následujícím příkladu:

My.User.CurrentPrincipal = CustomPrincipal

CurrentPrincipal Nastavení vlastnosti objektu My.User změní identitu, pod kterou aplikace běží. Objekt My.User zase vrátí informace o nově zadaném uživateli.

Přidání členů do My objektů

Typy vrácené z My.Application a My.Computer jsou definovány jako Partial třídy. Proto můžete rozšířit My.Application a My.Computer objekty vytvořením třídy s Partial názvem MyApplication nebo MyComputer. Třída nemůže být Private třídou. Pokud zadáte třídu jako součást My oboru názvů, můžete přidat vlastnosti a metody, které budou zahrnuty do objektů My.Application nebo My.Computer.

Následující příklad přidá vlastnost pojmenovanou DnsServerIPAddresses k objektu 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

Přidání vlastních objektů do My oboru názvů

My Přestože obor názvů poskytuje řešení pro mnoho běžných programovacích úloh, můžete narazit na úlohy, které My obor názvů neřeší. Vaše aplikace může například přistupovat k vlastním adresářovým službám pro uživatelská data nebo aplikace může používat sestavení, která nejsou ve výchozím nastavení nainstalována pomocí jazyka Visual Basic. Obor názvů můžete rozšířit My tak, aby zahrnoval vlastní řešení pro běžné úlohy specifické pro vaše prostředí. Obor My názvů lze snadno rozšířit a přidat nové členy tak, aby vyhovoval rostoucím potřebám aplikace. Navíc můžete nasadit rozšíření oboru názvů My ostatním vývojářům jako šablonu pro Visual Basic.

Přidání členů do My oboru názvů

Protože My je obor názvů jako jakýkoli jiný obor názvů, můžete do něj přidat vlastnosti nejvyšší úrovně tak, že přidáte modul a zadáte Namespace hodnotu My. Anotujte modul pomocí atributu HideModuleName , jak je znázorněno v následujícím příkladu. Atribut HideModuleName zajišťuje, že IntelliSense nezobrazí název modulu, když zobrazí členy My oboru názvů.

Namespace My
  <HideModuleName()> 
  Module MyCustomModule

  End Module
End Namespace

Pokud chcete přidat členy do My oboru názvů, přidejte do modulu vlastnosti podle potřeby. Pro každou vlastnost přidanou My do oboru názvů přidejte soukromé pole typu ThreadSafeObjectProvider(Of T), kde typ je typ vrácený vaší vlastní vlastností. Toto pole slouží k vytvoření instancí objektů bezpečných pro přístup z více vláken, které mají být vráceny vlastností pomocí volání metody GetInstance. Každé vlákno, které přistupuje k rozšířené vlastnosti, tak ve výsledku obdrží vlastní instanci vráceného typu. Následující příklad přidá vlastnost s názvem SampleExtension typu SampleExtension do My oboru názvů:

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

Přidání událostí do vlastních My objektů

Objekt My.Application můžete použít k exponování událostí pro vlastní My objekty tím, že rozšíříte částečnou třídu MyApplication v rámci My oboru názvů. Pokud pracujete na projektech pro Windows, můžete dvojím kliknutím na uzel Můj projekt v Průzkumníku řešení. V návrháři projektu jazyka Visual Basic klepněte na kartu Aplikace a potom klepněte na tlačítko Zobrazit události aplikace . Vytvoří se nový soubor s názvem ApplicationEvents.vb . Obsahuje následující kód pro rozšíření MyApplication třídy:

Namespace My
  Partial Friend Class MyApplication
  End Class
End Namespace

Obslužné rutiny událostí pro vlastní My objekty můžete přidat přidáním vlastních obslužných rutin událostí do MyApplication třídy. Vlastní události umožňují přidat kód, který se spustí při přidání nebo odebrání obslužné rutiny události, nebo když je událost vyvolána. Všimněte si, že kód pro vlastní událost AddHandler se spustí pouze tehdy, když uživatel přidá kód pro zpracování této události. Představte si například, že SampleExtension objekt z předchozí části má událost, pro kterou chcete přidat vlastní obslužnou Load rutinu události. Následující příklad kódu ukazuje vlastní obslužnou rutinu události s názvem SampleExtensionLoad , která bude vyvolána při výskytu My.SampleExtension.Load události. Při přidání kódu pro zpracování nové události My.SampleExtensionLoad se spustí část kódu AddHandler této vlastní události. Metoda MyApplication_SampleExtensionLoad je zahrnuta v příkladu kódu k zobrazení příkladu obslužné rutiny My.SampleExtensionLoad události, která zpracovává událost. Všimněte si, že SampleExtensionLoad událost bude dostupná, když vyberete možnost Moje události aplikace v levém rozevíracím seznamu nad Editorem kódu při úpravě souboru 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

Pokyny k návrhu

Při vývoji rozšíření pro My namespace využijte následující pokyny, které vám pomohou minimalizovat náklady na údržbu součástí rozšíření:

  • Zahrnout pouze logiku rozšíření. Logika zahrnutá v My rozšíření oboru názvů by měla obsahovat pouze kód, který je potřeba k zveřejnění požadovaných funkcí v My oboru názvů. Vzhledem k tomu, že se vaše rozšíření bude nacházet v uživatelských projektech jako zdrojový kód, aktualizace komponenty rozšíření má vysoké náklady na údržbu a pokud je to možné, měli byste se vyhnout.
  • Minimalizujte předpoklady projektu. Při vytváření rozšíření My oboru názvů nepředpokládáte sadu odkazů, importy na úrovni projektu ani konkrétní nastavení kompilátoru (například Option Strict vypnuto). Místo toho minimalizujte závislosti a plně kvalifikujte všechny odkazy na typy pomocí klíčového Global slova. Také se ujistěte, že rozšíření se zkompiluje, Option Strict aby se minimalizovaly chyby v rámci rozšíření.
  • Izolujte kód rozšíření. Umístěním kódu do jednoho souboru můžete rozšíření snadno nasadit jako šablonu položky sady Visual Studio. Další informace najdete v tomto tématu v části "Balení a nasazení rozšíření". Umístění veškerého My kódu rozšíření oboru názvů do jednoho souboru nebo samostatné složky v projektu pomůže také uživatelům najít rozšíření My oboru názvů.

Navrhování třídních knihoven pro My

Jak je tomu u většiny objektových modelů, některé návrhové vzory fungují dobře v rámci jmenného prostoru, zatímco jiné nikoli. Při navrhování rozšíření My oboru názvů zvažte následující principy:

  • Bezstavové metody. Metody v My oboru názvů by měly poskytovat kompletní řešení pro konkrétní úlohu. Ujistěte se, že hodnoty parametrů předané metodě poskytují všechny vstupy potřebné k dokončení konkrétní úlohy. Vyhněte se vytváření metod, které závisejí na předchozím stavu, jako jsou otevřená připojení k prostředkům.
  • Globální instance. Jediný stav, který je zachován v My oboru názvů, je globální pro projekt. Například My.Application.Info zapouzdřuje stav, který se sdílí v celé aplikaci.
  • Jednoduché typy parametrů. Udržujte věci jednoduché tím, že se vyhnete složitým typům parametrů. Místo toho vytvořte metody, které buď nepřebírají žádný vstup parametrů, nebo které berou jednoduché vstupní typy, jako jsou řetězce, primitivní typy atd.
  • Metody továrny. Některé typy je nezbytně obtížné instancovat. Poskytování továrních metod jako rozšíření My oboru názvů umožňuje snadnější objevování a používání typů, které spadají do této skupiny. Příkladem tovární metody, která dobře funguje, je My.Computer.FileSystem.OpenTextFileReader. V rozhraní .NET Framework je k dispozici několik typů datových proudů. Zadáním textových souborů pomáhá OpenTextFileReader uživateli pochopit, který datový proud se má použít.

Tyto pokyny nebrání obecným principům návrhu knihoven tříd. Jedná se spíše o doporučení optimalizovaná pro vývojáře, kteří používají Visual Basic a My obor názvů. Obecné principy návrhu pro vytváření knihoven tříd najdete v tématu Pokyny pro návrh architektury.

Balení a nasazování rozšíření

Rozšíření oboru názvů My můžete zahrnout do šablony projektu Visual Studio nebo je zabalit a nasadit jako položku Visual Studio. Když zabalíte My rozšíření oboru názvů jako šablonu položky sady Visual Studio, můžete využít další funkce poskytované jazykem Visual Basic. Tyto funkce umožňují zahrnout rozšíření, když projekt odkazuje na konkrétní sestavení, nebo uživatelům umožnit explicitně přidat My rozšíření oboru názvů pomocí stránky Moje rozšíření návrháře projektu jazyka Visual Basic.

Podrobnosti o nasazení My rozšíření oboru názvů najdete v tématu Balení a nasazení vlastních rozšíření My Extensions.

Viz také