Von VBA zu C#: Das Static-Schlüsselwort

Lies in den Artikel rein und unten bekommst Du ein unschlagbares Angebot!

Was bedeutet eigentlich das Schlüsselwort “static”, mit dem Sie sowohl Typen/Klassen also auch die Elemente einer Klasse wie Methoden oder Eigenschaften kennzeichnen können – und was ist bei der Erstellung und Nutzung von Typen und Elementen mit diesem Schlüsselwort zu beachten? Dies schauen wir uns im vorliegenden Artikel an und liefern einige Beispiele, welche die Regeln verdeutlichen.

Statische Klassen unter VBA

Unter VBA waren schon einige Verrenkungen nötig, wenn Sie auf die Methoden oder Eigenschaften einer Klasse zugreifen wollten, ohne diese Klasse selbst zu instanzieren – also beispielsweise so:

Dim objTest As clsTest
Set objTest = New clsTest
objTest.Beispielmethode

Mit ein paar Tricks konnten Sie eine Klasse mit einer zusätzlichen, im VBA-Editor nicht sichtbaren Eigenschaft ausstatten, die es ermöglichte, direkt auf ihre Methoden zuzugreifen. Das sah dann schlicht so aus:

clsTest.Beispielmethode

Der Trick ist, die Klasse per SaveAsText zu exportieren und dann den Wert des Attributs VB_PredeclaredId in einem Texteditor auf True einzustellen:

Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Compare Database
Option Explicit
Public Sub Beispielmethode()
     MsgBox "Beispielmethode"
End Sub

Danach konnten Sie in VBA einfach den Namen der Klasse gefolgt von einem Punkt angeben, um per IntelliSense die Member der Klasse einzublenden (siehe Bild 1). Sie konnten die Klasse aber weiterhin instanzieren und wie eine herkömmliche Klasse per Objektverweis nutzen.

Bild 1: “Statische” Klassen unter VBA

Zum Glück waren die beschriebenen Schritte nur notwending, wenn Sie die gewünschte Funktion tatsächlich im Kontext einer Klasse benötigten – also etwa, um Eigenschaften einzugeben und dann eine oder mehrere Methoden aufzurufen. Für den direkten Aufruf einer Methode (beziehungsweise Prozedur, wie es unter VBA heißt) gibt es ja zum Glück das gute, alte Standardmodul.

Statische Klassen unter C#

Unter C# ist dieses Feature standardmäßig vorgesehen, und zwar in verschiedenen Stufen. Dabei hilft Ihnen das Schlüsselwort static, das Sie dem Namen einer Klasse oder auch einer Methode, Variable oder anderen Membern voranstellen können – allerdings nicht in beliebigen Kombinationen.

In einer Klasse, die nicht mit dem Schlüsselwort static versehen ist, können Sie etwa eine Methode mit diesem Schlüsselwort ausstatten. Dies ist immer der Fall, wenn Sie etwa eine Konsolenanwendung erstellen – hier wird standardmäßig eine statische Methode namens Main angegeben, welche beim Start ausgelöst wird:

class Program {
     static void Main(string[] args) {
        ...
     }
}

Wollen Sie eine eigene Methode nutzen, ohne die Klasse als Objekt zu instanzieren, müssen Sie diese schlicht mit dem Schlüsselwort static auszeichnen. Dies erledigen Sie in beliebigen Klassen wie folgt:

class NichtStatisch {
     public static void StatischeMethode() {
         Console.WriteLine("Statische Methode in nicht 
             statischer Klasse.");
         Console.ReadLine();
     }
}

Diese Methode rufen Sie nun etwa von der Main-Methode des Projekts wie folgt auf:

static void Main1(string[] args) {
     NichtStatisch.StatischeMethode();
}

Beachten Sie, dass Sie hier den Namen der Klasse beziehungsweise des Typs angeben, in dem sich die Methode befindet, und dann nach Eingabe eines Punktes direkt die statische Klasse per IntelliSense auswählen können (siehe Bild 2). Wenn Sie eine Methode hingegen nicht als statisch deklarieren, sieht diese wie folgt aus:

Statische Methode einer nicht statischen Klasse unter C#

Bild 2: Statische Methode einer nicht statischen Klasse unter C#

 

Schreibe einen Kommentar