2010-03-02 66 views
24

Cosa comporta la creazione di un punto esclamativo (!) davanti a una variabile di riferimento oggetto in Visual Basic 6.0?Cosa fa mettere un punto esclamativo (!) Davanti a una variabile di riferimento oggetto?

Per esempio, vedo il seguente nel codice:

!RelativePath.Value = mstrRelativePath 

Cosa significa il ! significa?

+0

Sicuro che non è 'rs! RelativePath.Value'? –

+0

sì, ne sono sicuro. L'ho copiato direttamente dal blocco di codice. –

+1

ahhh ... Capisco ... È all'interno di un blocco 'With'. In particolare, 'adoRS'. –

risposta

42

E 'quasi certamente una dichiarazione all'interno di un blocco With:

With blah 
    !RelativePath.Value = mstrRelativePath 
    End With 

che è lo zucchero sintassi per

blah("RelativePath").Value = mstrRelativePath 

che è lo zucchero sintassi per

blah.DefaultProperty("RelativePath").Value = mstrRelativePath 

dove " DefaultProperty "è una proprietà con lo zero dispid in cui si trova dexato da una stringa. Come la proprietà Fields di un oggetto Recordset ADO.

Un po 'inevitabile con lo zucchero è che produce denti marci. Questo è il motivo per cui devi usare la parola chiave Imposta in VB6 e VBA. Perché senza di esso il compilatore non sa se intendevi copiare il riferimento all'oggetto o il valore predefinito della proprietà dell'oggetto. Eliminato in vb.net.

+0

Nella tua risposta hai detto "che è lo zucchero sintassi per". * Solo * zucchero sintassi? Mi chiedo se forse potrebbe contribuire ad accelerare il runtime dell'applicazione o ci sono altri effetti collaterali con l'uso di un '!' Invece di scrivere tutto il codice. –

+0

No, viene generato lo stesso codice esatto. –

7

Il punto esclamativo agisce in qualità di operatore di accesso membro sembra ...

soci Operatori

Per accedere a un membro di un tipo, si utilizza il punto (.) O punto esclamativo (!) operatore


Lo riprendo. È questo:

Punto esclamativo (!) Operatore Utilizzare ! operatore solo su una classe o sull'interfaccia come un dizionario accede all'operatore . La classe o l'interfaccia deve avere una proprietà predefinita che accetta un argomento di stringa singola . L'identificatore subito dopo! l'operatore diventa l'argomento di stringa della proprietà predefinita .

Problemi correlati