Glengamoi (Forum) · AspHeute · .NET Heute (RSS-Suche) · AspxFiles (Wiki) · .NET Blogs

Klassen in VBScript

Geschrieben von: Patrick A. Lorenz
Kategorie: ASP Tricks

This printed page brought to you by AlphaSierraPapa

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 TextOut

Die 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örter

Interessant 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-Einsatz

Soweit 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ßbemerkung

Das 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.

This printed page brought to you by AlphaSierraPapa

Download des Codes

Klicken Sie hier, um den Download zu starten.
http://www.aspheute.com/code/20000526.zip

Verwandte Artikel

Allgemeine MailParser-Klasse mit ASPMail
http:/www.aspheute.com/artikel/20000602.htm
CSVs aus MDBs leicht gemacht
http:/www.aspheute.com/artikel/20010605.htm
Daten aus CSV-Dateien in MDBs importieren
http:/www.aspheute.com/artikel/20010607.htm
Flash Detection ohne Komponente
http:/www.aspheute.com/artikel/20020320.htm
Große Datenmengen in Formularfeldern erfolgreich auslesen
http:/www.aspheute.com/artikel/20020430.htm
Klassenauflistungen mit dem Dictionary-Objekt
http:/www.aspheute.com/artikel/20020408.htm
Kopieren verboten - Lizenzsicherung bei ASP Scripts
http:/www.aspheute.com/artikel/20020411.htm
RemoteScripting - Einführung, Tips und Tricks
http:/www.aspheute.com/artikel/20010606.htm
Strukturierter Aufbau in der ASP-Programmierung
http:/www.aspheute.com/artikel/20011112.htm
Tracing in ASP
http:/www.aspheute.com/artikel/20010423.htm

Links zu anderen Sites

Only use VBScript classes with page-level scope
http://support.microsoft.com/support/kb/articles/Q246/5/96.ASP

 

©2000-2006 AspHeute.com
Alle Rechte vorbehalten. Der Inhalt dieser Seiten ist urheberrechtlich geschützt.
Eine Übernahme von Texten (auch nur auszugsweise) oder Graphiken bedarf unserer schriftlichen Zustimmung.