expando (Modificador)

Declara que las instancias de una clase admiten propiedades expando o que un método es un constructor de objeto expando.

expando statement

Argumentos

  • statement
    Obligatorio. Definición de una clase o un método.

Comentarios

El modificador expando se utiliza para marcar una clase que acepte propiedades expando como dinámicamente ampliable. A las propiedades expando de instancias de clase expando se debe tener acceso utilizando la notación []; no son accesibles con el operador punto. El modificador expando marca también un método como constructor de un objeto expando.

Las clases y métodos de clases se pueden marcar con este modificador. Los campos, las propiedades y los miembros de interfaz no pueden tomar este modificador.

Una clase expando tiene una propiedad privada oculta denominada Item que toma un parámetro Object y devuelve un tipo Object. No se puede definir una propiedad con esta firma en una clase expando.

Ejemplo 1

El siguiente ejemplo muestra un uso del modificador expando en una clase. La clase expando es como un objeto Object de JScript, pero hay algunas diferencias que se muestran en el siguiente ejemplo:

expando class CExpandoExample {
   var x : int = 10;
}

// New expando class-based object.
var testClass : CExpandoExample = new CExpandoExample;
// New JScript Object.
var testObject : Object = new Object;

// Add expando properties to both objects.
testClass["x"] = "ten";
testObject["x"] = "twelve";

// Access the field of the class-based object.
print(testClass.x);      // Prints 10.
// Access the expando property.
print(testClass["x"]);   // Prints ten.

// Access the property of the class-based object.
print(testObject.x);     // Prints twelve.
// Access the same property using the [] operator.
print(testObject["x"]);  // Prints twelve.

El resultado de este código es:

10
ten
twelve
twelve

Ejemplo 2

El siguiente ejemplo muestra un uso del modificador expando en un método. Cuando se llama al método expando del modo habitual, se tiene acceso al campo x. Si se utiliza el método como un constructor explícito con el operador new, se agrega una propiedad expando a un objeto nuevo:

class CExpandoExample {
   var x : int;
   expando function constructor(val : int) {
      this.x = val;
      return "Method called as a function.";
   }
}

var test : CExpandoExample = new CExpandoExample;
// Call the expando method as a function.
var str = test.constructor(123);
print(str);        // The return value is a string.
print(test.x);     // The value of x has changed to 123.

// Call the expando method as a constructor.
var obj = new test.constructor(456);
// The return value is an object, not a string.
print(obj.x);      // The x property of the new object is 456.
print(test.x);     // The x property of the original object is still 123.

El resultado de este código es:

Method called as a function.
123
456
123

Requisitos

Versión .NET

Vea también

Referencia

static (Modificador)

var (Instrucción)

function (Instrucción)

class (Instrucción)

Conceptos

Ámbito de variables y constantes

Anotaciones de tipo

Otros recursos

Modificadores