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ů.
Přizpůsobení existují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. Úplný seznam objektů v oboru názvů najdete v My
části Můj odkaz. 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 nahradit výchozí hodnotu vlastnosti instancí vlastního My.User.CurrentPrincipal
objektu objektu zabezpečení, 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
objektů.
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. Rozšíření oboru názvů můžete navíc nasadit My
ostatním vývojářům jako šablonu jazyka 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í voláním GetInstance
metody. V důsledku toho každé vlákno, které přistupuje k rozšířené vlastnosti 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 můžete použít My.Application
k zveřejnění událostí pro vlastní My
objekty rozšířením MyApplication
částečné třídy v My
oboru názvů. U projektů založených na Windows můžete poklikáním na uzel Můj projekt v projektu v Průzkumník ř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í, odebrání obslužné rutiny události nebo vyvolání události. Všimněte si, že kód vlastní události se spustí pouze v případě, že AddHandler
je kód přidaný uživatelem pro zpracování 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é My.SampleExtensionLoad
události se AddHandler
spustí část tohoto vlastního kódu 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 pro návrh
Při vývoji rozšíření oboru My
názvů využijte následující pokyny, které vám pomůžou minimalizovat náklady na údržbu komponent 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í vMy
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říkladOption Strict
vypnuto). Místo toho minimalizujte závislosti a plně kvalifikujte všechny odkazy na typy pomocí klíčovéhoGlobal
slova. Také se ujistěte, že se rozšíření zkompiluje,Option Strict
aby se minimalizovaly chyby v 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 části Balení a nasazení rozšíření dále v tomto tématu. 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 příponuMy
oboru názvů.
Navrhování knihoven tříd pro My
Stejně jako u většiny objektových modelů fungují některé vzory návrhu My
dobře v oboru názvů a jiné ne. 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říkladMy.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 jsou nutně obtížné vytvořit instanci. Poskytování metod továrny jako rozšíření
My
oboru názvů umožňuje snadněji zjišťovat a využívat typy, které spadají do této kategorie. Příkladem metody továrny, která dobře funguje, jeMy.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ů můžete zahrnout My
do šablony projektu sady Visual Studio nebo je můžete zabalit a nasadit jako šablonu položky sady 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.