2010-03-02 13 views
24

Was macht ein Ausrufezeichen (!) vor einer Objektreferenzvariablen in Visual Basic 6.0?Was bewirkt ein Ausrufezeichen (!) Vor einer Objektreferenzvariablen?

Zum Beispiel sehe ich folgende in Code:

!RelativePath.Value = mstrRelativePath 

Was bedeutet die ! bedeuten?

+0

Sicher, das ist nicht 'rs! RelativePath.Value'? –

+0

Ja, ich bin mir sicher. Ich habe es direkt aus dem Codeblock kopiert. –

+1

ahhh ... Ich sehe ... Es ist in einem 'With' Block. Insbesondere "adoRS". –

Antwort

42

Es ist mit ziemlicher Sicherheit eine Aussage innerhalb eines mit Block:

With blah 
    !RelativePath.Value = mstrRelativePath 
    End With 

die für Syntax Zucker ist

blah("RelativePath").Value = mstrRelativePath 

die für

Syntax Zucker ist
blah.DefaultProperty("RelativePath").Value = mstrRelativePath 

wo " DefaultProperty "ist eine Eigenschaft mit dem Wert" dispid zero " durch eine Schnur dexiert. Wie die Fields-Eigenschaft eines ADO-Recordset-Objekts.

Etwas unvermeidlich mit Zucker ist, dass es faule Zähne produziert. Aus diesem Grund müssen Sie das Schlüsselwort Set in VB6 und VBA verwenden. Denn ohne sie weiß der Compiler nicht, ob Sie den Objektverweis oder den Standardeigenschaftswert des Objekts kopieren wollten. In vb.net eliminiert.

+0

In Ihrer Antwort haben Sie gesagt, "das ist Syntax Zucker für". Ist es * nur * Syntaxzucker? Ich frage mich, ob es vielleicht helfen könnte, die Laufzeit der Anwendung zu beschleunigen, oder gibt es andere Nebenwirkungen bei der Verwendung eines '!', Anstatt den gesamten Code zu schreiben. –

+0

Nein, der exakt gleiche Code wird generiert. –

7

Das Ausrufezeichen wird als Mitglied Zugang Betreiber wirkt es scheint ...

Mitglied Zugang Betreiber

Um ein Mitglied eines Typs zuzugreifen, verwenden Sie der Punkt (.) Oder Ausrufezeichen (!) Betreiber


Ich nehme das zurück. Es ist dies:

Ausrufezeichen (!) Operator Verwenden Sie die ! Operator nur auf einer Klasse oder Schnittstelle als Wörterbuch Zugriff Betreiber. Die Klasse oder Schnittstelle muss über eine Standardeigenschaft verfügen, die ein einzelnes String-Argument akzeptiert. Die Kennung folgt unmittelbar auf! Der Operator wird das Zeichenfolgenargument für die Standardeigenschaft .

Verwandte Themen