7.1 Clasificaciones de expresiones

Visual Studio .NET 2003

Una expresión se puede clasificar como:

  • Un valor. Todos los valores tienen asociado un tipo.
  • Una variable. Todas variables tienen un tipo asociado, esto es, el tipo declarado de la variable.
  • Un espacio de nombres. Una expresión con su clasificación sólo puede aparecer como el miembro izquierdo de un acceso a miembro (Sección 7.5.4). En cualquier otro contexto, una expresión que se clasifica como un espacio de nombres produce un error en tiempo de compilación.
  • Tipo. Una expresión con esta clasificación sólo puede aparecer como el miembro izquierdo de un acceso a miembro (Sección 7.5.4) o como un operando del operador as (Sección 7.9.10), el operador is (Sección 7.9.9) o el operador typeof (Sección 7.5.11). En cualquier otro contexto, una expresión que se clasifica como un tipo produce un error en tiempo de compilación.
  • Un grupo de métodos, que es un conjunto de métodos sobrecargados producidos por una búsqueda de miembros (Sección 7.3). Un grupo de métodos puede tener asociada una expresión de instancia. Cuando se invoca un método de instancia, el resultado de la evaluación de la expresión de instancia se convierte en la instancia representada por this (Sección 7.5.7). Un grupo de métodos sólo está permitido en una expresión de invocación (Sección 7.5.5) o en una expresión de creación de delegado (Sección 7.5.10.3). En cualquier otro contexto, una expresión que se clasifica como un grupo de métodos produce un error en tiempo de compilación.
  • Un acceso a propiedad. Todos los accesos de propiedades tienen un tipo asociado, esto es, el tipo declarado de la propiedad. Además, un acceso a propiedad puede tener asociada una expresión de instancia. Si se llama a un descriptor de acceso (el bloque get o set) de un acceso a propiedad de una instancia, el resultado de la evaluación de la expresión de instancia se convierte en la instancia representada por this (Sección 7.5.7).
  • Un acceso a evento. Todos los accesos de evento tienen un tipo asociado, el tipo declarado del evento. Además, un acceso de evento puede tener asociada una expresión de instancia. Un acceso a evento puede aparecer como el operando izquierdo de los operadores += y -= (Sección 7.13.3). En cualquier otro contexto, una expresión que se clasifica como un acceso a evento produce un error en tiempo de compilación.
  • Un acceso a indizador. Todos los accesos a indizadores tienen un tipo asociado, el tipo declarado del indizador. Además, un acceso a indizador tiene asociadas una expresión de instancia y una lista de argumentos. Si se llama a un descriptor de acceso (el bloque get o set) de un acceso a indizador, el resultado de la evaluación de la expresión de instancia pasa a ser la instancia representada por this (Sección 7.5.7), y el resultado de la evaluación de la lista de argumentos se convierte en la lista de parámetros de la invocación.
  • Nada. Esto ocurre cuando la expresión es una invocación de un método con el tipo de valor devuelto void. Una expresión clasificada como nada sólo es válida en el contexto de una expresión de instrucción (Sección 8.6).

El resultado final de una expresión nunca es un espacio de nombres, un tipo, un grupo de métodos o un acceso de evento. En lugar de ello, como se ha mencionado antes, estas categorías de expresiones son construcciones intermedias que sólo están permitidas en determinados contextos.

Un acceso a propiedad o un acceso a indizador siempre se reclasifican como un valor mediante una llamada del descriptor de acceso get o del descriptor de acceso set. El descriptor de acceso concreto viene determinado por el contexto del acceso a propiedad o del acceso a indizador: si el acceso es el destino de una asignación, se llama al descriptor de acceso set para asignar un nuevo valor (Sección 7.13.1). En otro caso, se invoca el descriptor de acceso get para obtener el valor actual (Sección 7.1.1).

Mostrar: