Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Rozszerzanie
My Przestrzeń nazw w Visual Basic uwidacznia właściwości i metody, które umożliwiają łatwe korzystanie z możliwości programu .NET Framework.
My Przestrzeń nazw upraszcza typowe problemy programistyczne, często zmniejszając trudne zadanie do pojedynczego wiersza kodu. Ponadto przestrzeń nazw My jest w pełni rozszerzalna, dzięki czemu można dostosować zachowanie My i dodać nowe usługi do jej hierarchii, by odpowiadać na konkretne potrzeby aplikacji. W tym temacie omówiono zarówno sposób dostosowywania istniejących elementów przestrzeni nazw My, jak i dodawania własnych klas niestandardowych do przestrzeni nazw My.
Dostosowywanie istniejących My elementów przestrzeni nazw
My Przestrzeń nazw w języku Visual Basic udostępnia często używane informacje o aplikacji, komputerze i nie tylko. Aby uzyskać pełną listę obiektów w My przestrzeni nazw, zobacz Moje referencje. Może być konieczne dostosowanie istniejących elementów członkowskich My przestrzeni nazw, aby lepiej odpowiadały potrzebom aplikacji. Dowolna właściwość obiektu w My przestrzeni nazw, która nie jest tylko do odczytu, może być ustawiona na wartość niestandardową.
Załóżmy na przykład, że często używasz My.User obiektu w celu uzyskania dostępu do bieżącego kontekstu zabezpieczeń dla użytkownika uruchamiającego aplikację. Jednak firma używa niestandardowego obiektu użytkownika, aby uwidocznić dodatkowe informacje i możliwości dla użytkowników w firmie. W tym scenariuszu można zastąpić domyślną wartość właściwości My.User.CurrentPrincipal instancją własnego niestandardowego obiektu podmiotu zabezpieczeń, co pokazano w poniższym przykładzie.
My.User.CurrentPrincipal = CustomPrincipal
CurrentPrincipal Ustawienie właściwości obiektu My.User zmienia tożsamość, w której działa aplikacja. Kolejny obiekt My.User zwraca z kolei informacje o nowo określonym użytkowniku.
Dodawanie elementów do My obiektów
Typy zwracane z My.Application i My.Computer są definiowane jako Partial klasy. W związku z tym można rozszerzyć obiekty My.Application i My.Computer, tworząc klasę Partial nazwanej MyApplication lub MyComputer. Klasa nie może być klasą Private . Jeśli określisz klasę w ramach My przestrzeni nazw, możesz dodać właściwości i metody, które zostaną dołączone do My.Application obiektów lub My.Computer .
Poniższy przykład dodaje właściwość o nazwie DnsServerIPAddresses do My.Computer obiektu:
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
Dodawanie obiektów niestandardowych do My przestrzeni nazw
My Mimo że przestrzeń nazw udostępnia rozwiązania dla wielu typowych zadań programistycznych, mogą wystąpić zadania, których My przestrzeń nazw nie rozwiązuje. Na przykład aplikacja może uzyskiwać dostęp do niestandardowych usług katalogowych dla danych użytkownika lub aplikacja może używać zestawów, które nie są instalowane domyślnie w języku Visual Basic. Możesz rozszerzyć przestrzeń nazw, My aby uwzględnić niestandardowe rozwiązania do typowych zadań specyficznych dla danego środowiska.
My Przestrzeń nazw można łatwo rozszerzyć, aby dodać nowych członków w celu zaspokojenia rosnących potrzeb aplikacji. Ponadto możesz wdrożyć rozszerzenia przestrzeni nazw My innym programistom jako szablon języka Visual Basic.
Dodawanie członków do My przestrzeni nazw
Ponieważ My jest to przestrzeń nazw podobna do dowolnej innej przestrzeni nazw, możesz do niej dodać właściwości najwyższego poziomu, dodając moduł i określając element NamespaceMy. Dodaj adnotację do modułu za pomocą atrybutu HideModuleName , jak pokazano w poniższym przykładzie. Atrybut HideModuleName zapewnia, że IntelliSense nie będzie wyświetlać nazwy modułu podczas wyświetlania elementów członkowskich przestrzeni nazw My.
Namespace My
<HideModuleName()>
Module MyCustomModule
End Module
End Namespace
Aby dodać członków do przestrzeni nazw My, należy dodać właściwości do modułu zgodnie z potrzebami. Dla każdej właściwości dodanej do przestrzeni nazw My, dodaj prywatne pole typu ThreadSafeObjectProvider(Of T), gdzie typ to typ zwracany przez Twoją niestandardową właściwość. Do tworzenia wystąpień obiektów bezpiecznych wątkowo, które zwracane są przez właściwość, to pole używa metody GetInstance. W związku z tym każdy wątek, który uzyskuje dostęp do właściwości rozszerzonej, otrzymuje własne wystąpienie zwracanego typu. Poniższy przykład dodaje właściwość o nazwie SampleExtension , która jest typu SampleExtension do My przestrzeni nazw:
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
Dodawanie zdarzeń do obiektów niestandardowych My
Za pomocą obiektu My.Application można uwidaczniać zdarzenia dla niestandardowych obiektów My, rozszerzając częściową klasę MyApplication w przestrzeni nazw My. W przypadku projektów opartych na systemie Windows możesz kliknąć dwukrotnie węzeł Mój projekt w Eksploratorze rozwiązań. W projektancie projektu Visual Basic kliknij kartę Aplikacja , a następnie kliknij przycisk Wyświetl zdarzenia aplikacji . Zostanie utworzony nowy plik o nazwie ApplicationEvents.vb . Zawiera on następujący kod rozszerzający klasę MyApplication :
Namespace My
Partial Friend Class MyApplication
End Class
End Namespace
Programy obsługi zdarzeń dla obiektów niestandardowych My można dodać, dodając do klasy niestandardowe programy obsługi zdarzeń MyApplication . Zdarzenia niestandardowe umożliwiają dodanie kodu, który będzie wykonywany, gdy program obsługi zdarzeń zostanie dodany, usunięty lub gdy zdarzenie zostanie zgłoszone. Należy pamiętać, że kod zdarzenia niestandardowego jest uruchamiany tylko wtedy, AddHandler gdy użytkownik doda kod do obsługi zdarzenia. Rozważmy na przykład, że SampleExtension obiekt z poprzedniej sekcji zawiera Load zdarzenie, dla którego chcesz dodać niestandardową procedurę obsługi zdarzeń. Poniższy przykład kodu przedstawia niestandardową procedurę obsługi zdarzeń o nazwie SampleExtensionLoad , która zostanie wywołana po wystąpieniu My.SampleExtension.Load zdarzenia. Po dodaniu kodu do obsługi nowego zdarzenia My.SampleExtensionLoad, wykonywana jest część AddHandler tego niestandardowego kodu zdarzenia. Metoda MyApplication_SampleExtensionLoad jest uwzględniona w przykładzie kodu, aby pokazać przykład procedury obsługi zdarzeń obsługującej My.SampleExtensionLoad zdarzenie. Pamiętaj, że SampleExtensionLoad zdarzenie będzie dostępne po wybraniu opcji Moje zdarzenia aplikacji na liście rozwijanej po lewej stronie nad Edytorem kodu podczas edytowania pliku 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
Wytyczne dotyczące projektowania
Podczas opracowywania rozszerzeń w My przestrzeni nazw skorzystaj z poniższych wskazówek, aby zminimalizować koszty konserwacji składników rozszerzeń:
- Uwzględnij tylko logikę rozszerzenia. Logika zawarta w
Myrozszerzeniu przestrzeni nazw powinna zawierać tylko kod potrzebny do uwidocznienia wymaganych funkcji wMyprzestrzeni nazw. Ponieważ rozszerzenie będzie znajdować się w projektach użytkownika jako kod źródłowy, aktualizacja składnika rozszerzenia wiąże się z wysokim kosztem konserwacji i należy go uniknąć, jeśli to możliwe. - Zminimalizuj założenia projektu. Podczas tworzenia rozszerzeń przestrzeni nazw
Mynie należy zakładać istnienia określonego zestawu odwołań, importów na poziomie projektu ani konkretnych ustawień kompilatora (na przykładOption Strictwyłączonych). Zamiast tego zminimalizuj zależności i w pełni kwalifikuj wszystkie odwołania do typów przy użyciu słowa kluczowegoGlobal. Upewnij się również, że rozszerzenie jest kompilowane z użyciemOption Strict, aby zminimalizować błędy w rozszerzeniu. - Izoluj kod rozszerzenia. Umieszczenie kodu w jednym pliku sprawia, że rozszerzenie można łatwo wdrożyć jako szablon elementu programu Visual Studio. Aby uzyskać więcej informacji, zobacz "Pakowanie i wdrażanie rozszerzeń" w dalszej części tego tematu. Umieszczenie całego
Mykodu rozszerzenia przestrzeni nazw w jednym pliku lub oddzielnym folderze w projekcie pomoże również użytkownikom zlokalizowaćMyrozszerzenie przestrzeni nazw.
Projektowanie bibliotek klas dla My
Podobnie jak w przypadku większości modeli obiektów, niektóre wzorce projektowe działają dobrze w My przestrzeni nazw, a inne nie. Podczas projektowania rozszerzenia My przestrzeni nazw należy wziąć pod uwagę następujące zasady:
- Metody bezstanowe. Metody w
Myprzestrzeni nazw powinny zapewnić kompletne rozwiązanie dla określonego zadania. Upewnij się, że wartości parametrów, które są przekazywane do metody, zawierają wszystkie dane wejściowe wymagane do ukończenia określonego zadania. Unikaj tworzenia metod, które opierają się na poprzednim stanie, takich jak otwarte połączenia z zasobami. - Wystąpienia globalne. Stan utrzymywany w przestrzeni nazw
Myjest jedynym stanem globalnym dla projektu. Na przykładMy.Application.Infohermetyzuje stan, który jest dzielony w całej aplikacji. - Proste typy parametrów. Zachowaj prostotę, unikając złożonych typów parametrów. Zamiast tego utwórz metody, które nie przyjmują żadnych danych wejściowych parametrów lub przyjmują proste typy wejściowe, takie jak ciągi, typy pierwotne itd.
- Metody fabryki. Niektóre typy są z natury trudne do zainstancjonowania. Dostarczanie metod fabrycznych jako rozszerzeń przestrzeni nazw
Myumożliwiają łatwiejsze odnajdywanie i używanie typów, które należą do tej kategorii. Przykładem dobrze działającej metody wytwórczej jestMy.Computer.FileSystem.OpenTextFileReader. Istnieje kilka typów strumieni dostępnych w programie .NET Framework. Poprzez precyzyjne określenie plików tekstowych,OpenTextFileReaderpomaga użytkownikowi zrozumieć, którego strumienia użyć.
Te wytyczne nie wykluczają ogólnych zasad projektowania bibliotek klas. Są to raczej zalecenia zoptymalizowane dla deweloperów korzystających z języka Visual Basic i My przestrzeni nazw. Ogólne zasady projektowania dotyczące tworzenia bibliotek klas można znaleźć w temacie Framework Design Guidelines (Wytyczne dotyczące projektowania struktury).
Pakowanie i wdrażanie rozszerzeń
Można dołączyć rozszerzenia przestrzeni nazw My do szablonu projektu programu Visual Studio lub spakować je i wdrożyć jako szablon elementu programu Visual Studio. Podczas tworzenia pakietów My rozszerzeń przestrzeni nazw jako szablonu elementu programu Visual Studio możesz skorzystać z dodatkowych funkcji udostępnianych przez program Visual Basic. Te możliwości umożliwiają dołączenie rozszerzenia, gdy projekt odwołuje się do określonego zestawu, lub umożliwia użytkownikom jawne dodawanie My rozszerzenia przestrzeni nazw przy użyciu strony Moje rozszerzenia projektanta projektu Visual Basic.
Aby uzyskać szczegółowe informacje na temat wdrażania My rozszerzeń przestrzeni nazw, zobacz Pakowanie i wdrażanie niestandardowych rozszerzeń My Extensions.