Udostępnij za pomocą


Rozszerzanie My przestrzeni nazw w Visual Basic

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 My rozszerzeniu przestrzeni nazw powinna zawierać tylko kod potrzebny do uwidocznienia wymaganych funkcji w My przestrzeni 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 My nie należy zakładać istnienia określonego zestawu odwołań, importów na poziomie projektu ani konkretnych ustawień kompilatora (na przykład Option Strict wyłączonych). Zamiast tego zminimalizuj zależności i w pełni kwalifikuj wszystkie odwołania do typów przy użyciu słowa kluczowego Global. Upewnij się również, że rozszerzenie jest kompilowane z użyciem Option 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 My kodu rozszerzenia przestrzeni nazw w jednym pliku lub oddzielnym folderze w projekcie pomoże również użytkownikom zlokalizować My rozszerzenie 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 My przestrzeni 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 My jest jedynym stanem globalnym dla projektu. Na przykład My.Application.Info hermetyzuje 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 My umożliwiają łatwiejsze odnajdywanie i używanie typów, które należą do tej kategorii. Przykładem dobrze działającej metody wytwórczej jest My.Computer.FileSystem.OpenTextFileReader. Istnieje kilka typów strumieni dostępnych w programie .NET Framework. Poprzez precyzyjne określenie plików tekstowych, OpenTextFileReader pomaga 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.

Zobacz także