Modificador de expando
Declara que as instâncias de uma classe suportam expando propriedades ou que um método é um construtor de objetos expando.
expando statement
Argumentos
- statement
Obrigatório. Uma definição de classe ou método.
Comentários
O expando modificador é usado para marcar uma classe como extensible dinamicamente (um que ofereça suporte a propriedades de expando). Propriedades de expando em expando instâncias da classe devem ser acessadas usando o [] notação; eles não são acessíveis com o operador ponto. O expando modificador também marca o método como um expando construtor do objeto.
Classes e métodos em classes que podem ser marcados com o expando modificador. Campos, propriedades, interfaces e os membros das interfaces não podem levar a expando modificador.
Um expando classe tem uma propriedade oculta, privada chamada Item que leva um Object parâmetro e retorna um Object. Você não tem permissão para definir uma propriedade com essa assinatura em um expando classe.
Exemplo 1
O exemplo a seguir ilustra um uso o expando modificador em uma classe. A classe expando é como um JScript Object, mas existem algumas diferenças que são ilustrados aqui.
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.
A saída desse código é
10
ten
twelve
twelve
Exemplo 2
O exemplo a seguir ilustra um uso o expando modificador em um método. Quando o método expando é chamado de maneira normal, ele acessa o campo x. Quando o método é usado como um construtor explícito com o nova operador, ele adiciona uma propriedade expando para um novo objeto.
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.
A saída desse código é
Method called as a function.
123
456
123
Requisitos
Consulte também
Referência
Conceitos
Escopo de variáveis e constantes