Me, "My", "MyBase" und "MyClass" in Visual Basic

Me, My, MyBase und MyClass in Visual Basic haben ähnliche Namen, aber unterschiedliche Zwecke. In diesem Thema werden die einzelnen Entitäten beschrieben, um sie besser zu unterscheiden.

Bei mir selbst

Das Schlüsselwort Me bietet eine Möglichkeit, auf die spezifische Instanz einer Klasse oder Struktur zu verweisen, in der der Code derzeit ausgeführt wird. Me verhält sich wie eine Objektvariable oder eine Strukturvariable, die auf die aktuelle Instanz verweist. Die Verwendung von Me ist besonders nützlich, um Informationen zur derzeit ausgeführten Instanz einer Klasse oder Struktur an eine Prozedur in einer anderen Klasse, einer anderen Struktur oder einem anderen Modul zu übergeben.

Angenommen, Sie verfügen in einem Modul über die folgende Prozedur:

Sub ChangeFormColor(FormName As Form)  
   Randomize()  
   FormName.BackColor = Color.FromArgb(Rnd() * 256, Rnd() * 256, Rnd() * 256)  
End Sub  

Sie können diese Prozedur aufrufen und die aktuelle Instanz der Form-Klasse mithilfe der folgenden Anweisung als Argument übergeben:

ChangeFormColor(Me)  

My

Das Feature My bietet einfachen und intuitiven Zugriff auf mehrere .NET Framework-Klassen, mit deren Hilfe Visual Basic-Benutzer*innen mit dem Computer, der Anwendung, den Einstellungen, den Ressourcen usw. interagieren kann. Eine Liste dieser Klassen finden Sie in der Referenz zu Visual Basic-Laufzeitobjekten.

MyBase

Das Schlüsselwort MyBase verhält sich wie eine Objektvariable, die auf die Basisklasse der aktuellen Instanz einer Klasse verweist. MyBase wird häufig für den Zugriff auf Basisklassenmember verwendet, die in einer abgeleiteten Klasse überschrieben oder für die ein Shadowing durchgeführt wird. MyBase.New wird verwendet, um explizit einen Basisklassenkonstruktor aus einem abgeleiteten Klassenkonstruktor aufzurufen.

MyClass

Das Schlüsselwort MyClass verhält sich wie eine Objektvariable, die auf die aktuelle Instanz einer Klasse verweist, wie sie ursprünglich implementiert wurde. MyClass ähnelt Me, aber alle Methodenaufrufe dafür werden so behandelt, als ob die Methode NotOverridable lautete.

Siehe auch