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.