Klassen in VBScript
Geschrieben von: Patrick A. Lorenz Seit Version 5.0 bietet VBScript die Möglichkeit, Klassen anzulegen und somit mit Eigenschaften und Methoden zu arbeiten. Jeder Entwickler einer höheren Sprache wie VB, Delphi, C, etc. wird jetzt vor Vorfreude nervös mit den Augen zucken, aber ob sich Klassen wirklich sinnvoll in VBScript einsetzen lassen, soll dieser Artikel klären. Wie normale Funktionen werden auch Klassen im normalen Kontext einer VBScript Datei notiert und nicht in einer separaten Datei, wie etwa in VB. Es wurde hierzu die Schlüsselworter Class und End Class eingeführt, die die eigentliche Klasse einrahmen. Class ClassName ... End Class Innerhalb der Klasse lassen sich nun mit Hilfe von [Private|Public] [Default] Sub|Function()und [Private|Public] [Default] Property Get|Let|Set() Methoden und Eigenschaften implementieren. Der Syntax orientiert sich dabei am großen Visual Basic. Die Beispiel-Klasse TextOutDie im folgenden dargestellte Klasse soll einen beliebigen Text in der Eigenschaft Text aufnehmen und diesen bei Aufruf der Methode WriteLn ausgeben. Der Code für die Klasse TextOut sowie den Code zum Testen der Klasse kann man in einer ASP Datei zusammenfassen: <% @LANGUAGE = "VBScript" %> <% Class TextOut 'Deklarationen Dim m_Text 'Öffentliche Eigenschaft Text Public Property Get Text Text = m_Text End Property Public Property Let Text(newText) m_Text = newText End Property 'Öffentliche Methode WriteLn() Public Function WriteLn() Response.Write Text ' für ASP ' WScript.Echo Text ' für WSH End Function End Class Dim x Set x = New TextOut With x .Text = "Hallo Welt" .WriteLn() End With %> Die Klasse TextOut verfügt über eine Eigenschaft Text, auf die lesend und schreibend zugegriffen werden kann. Der Inhalt der Eigenschaft wird in der Member Variable m_Text gespeichert. Zudem gibt es die Methode WriteLn mit dem der Inhalt der Eigenschaft ausgegeben werden kann - und zwar im Falle von ASP mit Response.Write. Vor dem Aufruf muß die Klasse mit dem neuen Schlüsselwort New instanziert werden, CreateObject kann nicht verwendet werden. Danach kann das Objekt verwendet werden, indem man Eigenschaften und Methoden aufruft. Die optionalen SchlüsselwörterInteressant sind auch die optionalen Schlüsselwörter Private und Public, über die man wie im großen Bruder VB angeben kann, ob eine Eigenschaft oder Methode öffentlich oder privat verwendet werden soll. Bei einer öffentlichen Deklaration ist der Zugriff von außen möglich, bei einer privaten nur von innerhalb der Klasse. Wird weder Public noch Private bei der Deklaration angegeben, so nimmt VBScript automatisch Public an. Neben Methoden lassen sich auch Variablen als Public definieren, und sind somit öffentlich zugreifbar. Dies ermöglicht den Wegfall des Property Get|Let|Set Konstruktes, was den Schreibaufwand unter Umständen enorm reduzieren kann. Verkürzt sieht unser obiges Beispiel wie folgt aus: <% Class TextOut 'Öffentliche Variable Text Public Text 'Öffentliche Methode WriteLn() Public Default Function WriteLn() Response.Write Text ' für ASP ' WScript.Echo Text ' für WSH End Function End Class Set x = New TextOut x.Text = "Hallo Welt" x %> Im letzten Beispiel wurde das das Schlüsselwort Default verwendet. Hierüber läßt sich eine Methode oder Eigenschaft festlegen, die nicht angegeben werden muß um standard(default)mäßig aufgerufen zu werden. Bei Eigenschaften kann hier aber nur der Get Teil verwendet werden, da bedingt durch das Late Binding von VBScript der Wert ansonsten nicht der Standard-Eigenschaft sondern der instanzierten Klasse selbst zugewiesen werden würde und diese somit terminiert werden würde. Praxis-EinsatzSoweit die Theorie der Klassen in VBScript, aber wie sieht es nun aber in der Praxis aus? Als ich mich das erste Mal mit VBScript Klassen beschäftigt habe, schossen mir sofort Gedanken an Warenkörbe, Benutzer-Verwaltungen, etc. in den Kopf. Sofort habe ich eine erste Klasse geschrieben und diese in einer Include-Datei abgelegt. Nun habe ich zwei ASP Seiten erstellt, die beide die Klasse included haben. Die erste Seite hat die Klasse in einer Variablen mit Session Scope instanziert und einige Eigenschaften zugewiesen. Die zweite Seite versucht nun, auf die Eigenschaften der Klasse zuzugreifen. Ergebnis: Ein ASP Runtime Error. Microsoft äußert sich im Knowledgebase Artikel Q246596 dazu, bestätigt und nennt als Lösung: "Only use VBScript classes with page-level scope.". Schade, wäre es doch so schön gewesen. SchlußbemerkungDas Klassen-Konstrukt von VBScript bietet eine Reihe von interessanten Möglichkeiten, die sich gerade in Verbindung mit Includes sehr gut nutzen lassen. Als Anwendungsbeispiel fällt mir hier spontan ein allgemeiner Mail-Parser ein, der auf der einen Seite mit Variablen und deren Inhalt gefüllt wird und auf der anderen Seite ein angegebenes Textfile parst und das Ergebnis versendet. Dieser Parser soll Inhalt eines weiteren Artikels sein. Download des CodesKlicken Sie hier, um den Download zu starten. Verwandte Artikel
Allgemeine MailParser-Klasse mit ASPMail Links zu anderen Sites
Only use VBScript classes with page-level scope Wenn Sie jetzt Fragen haben...Wenn Sie Fragen rund um die in diesem Artikel vorgestellte Technologie haben, dann schauen Sie einfach bei uns in den Community Foren der deutschen .NET Community vorbei. Die Teilnehmer helfen Ihnen gerne, wenn Sie sich zur im Artikel vorgestellten Technologie weiterbilden möchten. Haben Sie Fragen die sich direkt auf den Inhalt des Artikels beziehen, dann schreiben Sie dem Autor! Unsere Autoren freuen sich über Feedback zu ihren Artikeln. Ein einfacher Klick auf die Autor kontaktieren Schaltfläche (weiter unten) und schon haben Sie ein für diesen Artikel personalisiertes Anfrageformular.
Und zu guter Letzt möchten wir Sie bitten, den Artikel zu bewerten. Damit helfen Sie uns, die Qualität der Artikel zu verbessern - und anderen Lesern bei der Auswahl der Artikel, die sie lesen sollten.
©2000-2006 AspHeute.com |