Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Erweitern des
Der My
Namespace in Visual Basic macht Eigenschaften und Methoden verfügbar, mit denen Sie die Leistungsfähigkeit von .NET Framework problemlos nutzen können. Der My
Namespace vereinfacht häufige Programmierprobleme und reduziert häufig eine schwierige Aufgabe auf eine einzelne Codezeile. Darüber hinaus ist der My
-Namespace vollständig erweiterbar, sodass Sie das Verhalten von My
anpassen und neue Dienste zu seiner Hierarchie hinzufügen können, um sich an bestimmte Anwendungsanforderungen anzupassen. In diesem Thema wird erläutert, wie vorhandene Mitglieder des My
-Namespaces angepasst werden und wie Sie eigene benutzerdefinierte Klassen zum My
-Namespace hinzufügen.
Anpassen vorhandener My
-Namespacemember
Der My
Namespace in Visual Basic macht häufig verwendete Informationen zu Ihrer Anwendung, Ihrem Computer und mehr verfügbar. Eine vollständige Liste der Objekte im My
Namespace finden Sie unter "Meine Referenz". Möglicherweise müssen Sie vorhandene Member des My
Namespace anpassen, damit sie den Anforderungen Ihrer Anwendung besser entsprechen. Jede Eigenschaft eines Objekts im My
-Namespace, die nicht schreibgeschützt ist, kann auf einen benutzerdefinierten Wert festgelegt werden.
Angenommen, Sie verwenden das My.User
Objekt häufig, um auf den aktuellen Sicherheitskontext für den Benutzer zuzugreifen, der Ihre Anwendung ausführt. Ihr Unternehmen verwendet jedoch ein benutzerdefiniertes Benutzerobjekt, um zusätzliche Informationen und Funktionen für Benutzer innerhalb des Unternehmens verfügbar zu machen. In diesem Szenario können Sie den Standardwert der My.User.CurrentPrincipal
Eigenschaft durch eine Instanz Ihres eigenen benutzerdefinierten Prinzipalobjekts ersetzen, wie im folgenden Beispiel gezeigt:
My.User.CurrentPrincipal = CustomPrincipal
Durch Festlegen der CurrentPrincipal
Eigenschaft für das My.User
Objekt wird die Identität geändert, unter der die Anwendung ausgeführt wird. Das My.User
Objekt gibt wiederum Informationen zum neu angegebenen Benutzer zurück.
Hinzufügen von Elementen zu My
Objekten
Die zurückgegebenen My.Application
Typen und My.Computer
werden als Partial
Klassen definiert. Daher können Sie die Objekte My.Application
und My.Computer
erweitern, indem Sie eine Partial
-Klasse namens MyApplication
oder MyComputer
erstellen. Die Klasse kann keine Private
-Klasse sein. Wenn Sie die Klasse als Teil des My
-Namespaces angeben, können Sie Eigenschaften und Methoden hinzufügen, die zu den My.Application
- oder My.Computer
-Objekten hinzugefügt werden.
Im folgenden Beispiel wird eine Eigenschaft mit dem Namen DnsServerIPAddresses
zu dem My.Computer
-Objekt hinzugefügt.
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
Hinzufügen von benutzerdefinierten Objekten zum My
Namespace
Obwohl der My
Namespace Lösungen für viele gängige Programmieraufgaben bereitstellt, treten möglicherweise Aufgaben auf, die der My
Namespace nicht adresst. Ihre Anwendung kann beispielsweise auf benutzerdefinierte Verzeichnisdienste für Benutzerdaten zugreifen, oder Ihre Anwendung verwendet Assemblys, die nicht standardmäßig mit Visual Basic installiert sind. Sie können den My
Namespace erweitern, um benutzerdefinierte Lösungen auf allgemeine Aufgaben einzuschließen, die für Ihre Umgebung spezifisch sind. Der My
Namespace kann einfach erweitert werden, um neue Member hinzuzufügen, um wachsende Anwendungsanforderungen zu erfüllen. Darüber hinaus können Sie Ihre My
Namespaceerweiterungen als Visual Basic-Vorlage für andere Entwickler bereitstellen.
Hinzufügen von Mitgliedern zum My
Namespace
Da My
ein Namespace wie jeder andere Namespace ist, können Sie ihm Eigenschaften auf oberster Ebene hinzufügen, indem Sie einfach ein Modul hinzufügen und einen Namespace
von My
angeben. Kommentieren Sie das Modul mit dem HideModuleName
Attribut, wie im folgenden Beispiel gezeigt. Das HideModuleName
Attribut stellt sicher, dass IntelliSense den Modulnamen nicht anzeigt, wenn die Member des My
Namespaces angezeigt werden.
Namespace My
<HideModuleName()>
Module MyCustomModule
End Module
End Namespace
Um Mitglieder zum My
-Namespace hinzuzufügen, fügen Sie dem Modul nach Bedarf Eigenschaften hinzu. Fügen Sie für jede Eigenschaft, die dem My
Namespace hinzugefügt wird, ein privates Feld vom Typ ThreadSafeObjectProvider(Of T)
hinzu, wobei der Typ der typ ist, der von Ihrer benutzerdefinierten Eigenschaft zurückgegeben wird. Dieses Feld wird verwendet, um threadsichere Objektinstanzen zu erstellen, die von der Eigenschaft durch Aufrufen der GetInstance
Methode zurückgegeben werden. Daher erhält jeder Thread, der auf die erweiterte Eigenschaft zugreift, eine eigene Instanz des zurückgegebenen Typs. Im folgenden Beispiel wird eine Eigenschaft mit dem Namen SampleExtension
vom Typ SampleExtension
zum My
-Namespace hinzugefügt:
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
Hinzufügen von Ereignissen zu benutzerdefinierten My
Objekten
Sie können das My.Application
Objekt verwenden, um Ereignisse für Ihre benutzerdefinierten My
Objekte verfügbar zu machen, indem Sie die MyApplication
partielle Klasse im My
Namespace erweitern. Bei Windows-basierten Projekten können Sie im Projektmappen-Explorer auf den Knoten Mein Projekt für Ihr Projekt doppelklicken. Klicken Sie im Visual Basic Project Designer auf die Registerkarte "Anwendung " und dann auf die Schaltfläche " Anwendungsereignisse anzeigen ". Es wird eine neue Datei mit dem Namen ApplicationEvents.vb erstellt. Sie enthält den folgenden Code zum Erweitern der MyApplication
Klasse:
Namespace My
Partial Friend Class MyApplication
End Class
End Namespace
Sie können Ereignishandler für Ihre benutzerdefinierten Objekte hinzufügen, indem Sie der My
Klasse benutzerdefinierte MyApplication
Ereignishandler hinzufügen. Mit benutzerdefinierten Ereignissen können Sie Code hinzufügen, der ausgeführt wird, wenn ein Ereignishandler hinzugefügt, entfernt oder das Ereignis ausgelöst wird. Beachten Sie, dass der AddHandler
Code für ein benutzerdefiniertes Ereignis nur ausgeführt wird, wenn code von einem Benutzer zum Behandeln des Ereignisses hinzugefügt wird. Denken Sie beispielsweise daran, dass das SampleExtension
Objekt aus dem vorherigen Abschnitt über ein Load
Ereignis verfügt, für das Sie einen benutzerdefinierten Ereignishandler hinzufügen möchten. Das folgende Codebeispiel zeigt einen benutzerdefinierten Ereignishandler mit dem Namen SampleExtensionLoad
, der beim Eintreten des My.SampleExtension.Load
Ereignisses aufgerufen wird. Wenn Code zum Behandeln des neuen My.SampleExtensionLoad
Ereignisses hinzugefügt wird, wird der AddHandler
Teil dieses benutzerdefinierten Ereigniscodes ausgeführt. Die MyApplication_SampleExtensionLoad
Methode ist im Codebeispiel enthalten, um ein Beispiel für einen Ereignishandler anzuzeigen, der das My.SampleExtensionLoad
Ereignis behandelt. Beachten Sie, dass das SampleExtensionLoad
Ereignis verfügbar ist, wenn Sie die Option "Meine Anwendungsereignisse " in der linken Dropdownliste oberhalb des Code-Editors auswählen, wenn Sie die ApplicationEvents.vb Datei bearbeiten.
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
Entwurfsrichtlinien
Wenn Sie Erweiterungen für den My
Namespace entwickeln, verwenden Sie die folgenden Richtlinien, um die Wartungskosten Ihrer Erweiterungskomponenten zu minimieren:
- Fügen Sie nur die Erweiterungslogik ein. Die in der
My
Namespaceerweiterung enthaltene Logik sollte nur den Code enthalten, der erforderlich ist, um die erforderliche Funktionalität imMy
Namespace verfügbar zu machen. Da sich Ihre Erweiterung in Benutzerprojekten als Quellcode befindet, führt die Aktualisierung der Erweiterungskomponente zu hohen Wartungskosten und sollte möglichst vermieden werden. - Minimieren Sie Projektannahmen. Wenn Sie die Erweiterungen des
My
-Namespace erstellen, setzen Sie nicht eine Gruppe von Verweisen, Importe auf Projektebene oder bestimmte Compilereinstellungen (z. B.Option Strict
deaktiviert) als Annahme voraus. Minimieren Sie stattdessen Abhängigkeiten, und qualifizieren Sie alle Typverweise mithilfe desGlobal
Schlüsselworts. Stellen Sie außerdem sicher, dass die Erweiterung mit aktivierterOption Strict
-Einstellung kompiliert wird, um Fehler in der Erweiterung zu minimieren. - Isolieren Sie den Erweiterungscode. Wenn Sie den Code in einer einzelnen Datei platzieren, kann die Erweiterung ganz einfach als Visual Studio-Elementvorlage bereitgestellt werden. Weitere Informationen finden Sie weiter unten in diesem Thema unter "Packen und Bereitstellen von Erweiterungen". Das Platzieren des gesamten
My
-Namespaceerweiterungscodes in einer einzelnen Datei oder einem separaten Ordner in einem Projekt hilft den Benutzern auch, dieMy
-Namespaceerweiterung zu finden.
Entwerfen von Klassenbibliotheken für My
Wie bei den meisten Objektmodellen funktionieren einige Entwurfsmuster im My
Namespace und andere nicht. Berücksichtigen Sie beim Entwerfen einer Erweiterung für den My
Namespace die folgenden Prinzipien:
- Zustandslose Methoden. Methoden im
My
Namespace sollten eine vollständige Lösung für eine bestimmte Aufgabe bereitstellen. Stellen Sie sicher, dass die Parameterwerte, die an die Methode übergeben werden, alle Eingaben bereitstellen, die zum Ausführen der jeweiligen Aufgabe erforderlich sind. Vermeiden Sie das Erstellen von Methoden, die auf dem vorherigen Zustand basieren, z. B. offene Verbindungen mit Ressourcen. - Globale Instanzen. Der einzige Zustand, der im
My
-Namespace beibehalten wird, ist global für das Projekt. Zum Beispiel kapseltMy.Application.Info
den Zustand, der in der gesamten Anwendung gemeinsam genutzt wird. - Einfache Parametertypen. Halten Sie die Dinge einfach, indem Sie komplexe Parametertypen vermeiden. Erstellen Sie stattdessen Methoden, die keine Parametereingabe übernehmen oder einfache Eingabetypen wie Zeichenfolgen, Grundtypen usw. verwenden.
- Fabrikmethoden Einige Typen sind notwendigerweise schwer zu instanziieren. Durch das Anbieten von Factory-Methoden als Erweiterungen für den
My
Namespace können Sie Typen einfacher entdecken und verwenden, die in diese Kategorie fallen. Ein Beispiel für eine Factory-Methode, die gut funktioniert, istMy.Computer.FileSystem.OpenTextFileReader
. Es gibt mehrere Streamtypen, die in .NET Framework verfügbar sind. Durch die spezifische Angabe von Textdateien hilftOpenTextFileReader
dem Benutzer zu verstehen, welcher Datenstrom verwendet werden soll.
Diese Richtlinien schließen keine allgemeinen Entwurfsprinzipien für Klassenbibliotheken aus. Stattdessen sind sie Empfehlungen, die für Entwickler optimiert sind, die Visual Basic und den My
Namespace verwenden. Allgemeine Entwurfsprinzipien zum Erstellen von Klassenbibliotheken finden Sie unter Framework-Entwurfsrichtlinien.
Packen und Bereitstellen von Erweiterungen
Sie können Namespaceerweiterungen in eine Visual Studio-Projektvorlage einschließen My
oder Ihre Erweiterungen verpacken und als Visual Studio-Elementvorlage bereitstellen. Wenn Sie Ihre My
Namespaceerweiterungen als Visual Studio-Elementvorlage verpacken, können Sie zusätzliche Funktionen von Visual Basic nutzen. Mit diesen Funktionen können Sie eine Erweiterung einschließen, wenn ein Projekt auf eine bestimmte Assembly verweist, oder Benutzern das explizite Hinzufügen der My
Namespaceerweiterung mithilfe der Seite "Meine Erweiterungen" des Visual Basic-Projekt-Designers ermöglichen.
Ausführliche Informationen zum Bereitstellen von My
Namespaceerweiterungen finden Sie unter "Packen und Bereitstellen von benutzerdefinierten Meine Erweiterungen".