2010-03-02 270 views
24

¿Qué significa poner un signo de admiración (!) delante de una variable de referencia de objeto en Visual Basic 6.0?¿Qué significa poner un signo de exclamación (!) Delante de una variable de referencia de objeto?

Por ejemplo, veo lo siguiente en código:

!RelativePath.Value = mstrRelativePath 

¿Qué significa la !?

+0

Seguro que no es 'rs! RelativePath.Value'? –

+0

sí, estoy seguro. Lo copié directamente del bloque de código. –

+1

ahhh ... Ya veo ... Está dentro de un bloque 'With'. Específicamente, 'adoRS'. –

Respuesta

42

Es casi seguro que una declaración dentro de un bloque With:

With blah 
    !RelativePath.Value = mstrRelativePath 
    End With 

que es el azúcar sintaxis para

blah("RelativePath").Value = mstrRelativePath 

que es el azúcar sintaxis para

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

donde " DefaultProperty "es una propiedad con dispid zero que está en dexed por una cadena. Al igual que la propiedad Fields de un objeto ADO Recordset.

Algo inevitable con el azúcar es que produce dientes podridos. Esta es la razón por la que debe utilizar la palabra clave Establecer en VB6 y VBA. Porque sin él, el compilador no sabe si pretendía copiar la referencia del objeto o el valor de propiedad predeterminado del objeto. Eliminado en vb.net.

+0

En tu respuesta dijiste, "cuál es azúcar de sintaxis para". ¿Es * solo * azúcar de sintaxis? Me pregunto si tal vez podría ayudar a acelerar el tiempo de ejecución de la aplicación o si hay otros efectos secundarios con el uso de '!' En lugar de escribir todo el código. –

+0

No, se genera exactamente el mismo código. –

7

El signo de exclamación está actuando como operador de acceso de los miembros que parece ...

miembro de acceso de los operadores

Para acceder a un miembro de un tipo, se utiliza el punto (.) O signo de admiración (!) operador


Retiro eso. Es esto:

Signo de exclamación (!) Operador ¡Utilice el ! operador solo en una clase o interfaz como operador de acceso de diccionario . La clase o interfaz debe tener una propiedad predeterminada que acepte un único argumento de cadena. El identificador inmediatamente después del! El operador se convierte en el argumento de cadena para la propiedad predeterminada .

Cuestiones relacionadas