Udostępnij za pośrednictwem


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 jest w pełni rozszerzalna, My dzięki czemu można dostosować zachowanie My i dodać nowe usługi do hierarchii, aby dostosować się do określonych potrzeb aplikacji. W tym temacie omówiono zarówno sposób dostosowywania istniejących elementów My członkowskich przestrzeni nazw, jak i sposobu dodawania własnych klas niestandardowych do My przestrzeni nazw.

Dostosowywanie istniejących My elementów członkowskich 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 odwołanie. 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ć wartość My.User.CurrentPrincipal domyślną właściwości wystąpieniem własnego niestandardowego obiektu podmiotu zabezpieczeń, jak 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. Z My.User kolei obiekt zwraca informacje o nowo określonym użytkowniku.

Dodawanie elementów członkowskich 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ć My.Application obiekty i My.Computer , tworząc klasę Partial o nazwie 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ć My rozszerzenia przestrzeni nazw dla innych deweloperów jako szablon języka Visual Basic.

Dodawanie elementów członkowskich 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 funkcja IntelliSense nie będzie wyświetlać nazwy modułu podczas wyświetlania My elementów członkowskich przestrzeni nazw.

Namespace My
  <HideModuleName()> 
  Module MyCustomModule

  End Module
End Namespace

Aby dodać członków do My przestrzeni nazw, dodaj właściwości zgodnie z potrzebami do modułu. Dla każdej właściwości dodanej My do przestrzeni nazw dodaj prywatne pole typu ThreadSafeObjectProvider(Of T), gdzie typ jest typem zwracanym przez właściwość niestandardową. To pole służy do tworzenia wystąpień obiektów bezpiecznych wątkowo do zwrócenia przez właściwość przez wywołanie GetInstance metody . 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ą My.Application obiektu można uwidaczniać zdarzenia dla obiektów niestandardowych My , rozszerzając klasę MyApplication częściową w My przestrzeni nazw. W przypadku projektów opartych na systemie Windows możesz kliknąć dwukrotnie węzeł Mój projekt w programie dla projektu w Eksplorator rozwiązań. W programie Visual Basic Project Projektant 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ą dodawanie kodu, który będzie wykonywany po dodaniu, usunięciu lub wystąpieniu zdarzenia programu obsługi zdarzeń. 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 My.SampleExtensionLoad zdarzenia AddHandler część tego niestandardowego kodu zdarzenia jest wykonywana. 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 powyżej Edytora 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ń My przestrzeni nazw nie należy zakładać zestawu odwołań, importów na poziomie projektu ani określonych ustawień kompilatora (na przykład Option Strict wyłączonych). Zamiast tego zminimalizuj zależności i w pełni kwalifikują odwołania do wszystkich typów przy użyciu słowa kluczowego Global . Upewnij się również, że rozszerzenie jest kompilowane za pomocą Option Strict polecenia , 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. Jedynym stanem, który jest utrzymywany w My przestrzeni nazw, jest globalny dla projektu. Na przykład My.Application.Info hermetyzuje stan, który jest współużytkowany 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 muszą być trudne do utworzenia wystąpienia. Zapewnienie metod fabrycznych jako rozszerzeń My przestrzeni nazw umożliwia łatwiejsze odnajdywanie i używanie typów, które należą do tej kategorii. Przykładem metody fabryki, która dobrze działa, jest My.Computer.FileSystem.OpenTextFileReader. Istnieje kilka typów strumieni dostępnych w programie .NET Framework. Dzięki określeniu plików OpenTextFileReader tekstowych pomaga użytkownikowi zrozumieć, który strumień ma być używany.

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ń

Rozszerzenia przestrzeni nazw można dołączyć My do szablonu projektu programu Visual Studio lub spakować rozszerzenia i wdrożyć je 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 w programie Visual Basic Project Projektant.

Aby uzyskać szczegółowe informacje na temat wdrażania My rozszerzeń przestrzeni nazw, zobacz Pakowanie i wdrażanie niestandardowych rozszerzeń My Extensions.

Zobacz też