expando, modificateur
Mise à jour : novembre 2007
Déclare que les instances d'une classe prennent en charge des propriétés expando ou qu'une méthode est un constructeur d'objet expando.
expando statement
Arguments
- statement
Obligatoire. Une définition de méthode ou de classe.
Notes
Le modificateur expando permet de marquer une classe comme étant dynamiquement extensible (une classe qui prend en charge les propriétés expando). Les propriétés expando définies sur les instances de classe expando sont accessibles à l'aide de la notation [] ; elles ne sont pas accessibles avec l'opérateur point (« . »). Le modificateur expando marque également la méthode comme un constructeur d'objet expando.
Les classes et les méthodes des classes peuvent être marquées avec le modificateur expando. Les champs, les propriétés, les interfaces et les membres d'interfaces ne peuvent pas accepter le modificateur expando.
Une classe expando possède une propriété privée et masquée appelée Item qui prend un seul paramètre Object et retourne un Object. Vous n'êtes pas autorisé à définir une propriété avec cette signature sur une classe expando.
Exemple 1
L'exemple ci-dessous illustre une utilisation du modificateur expando sur une classe. Si la classe expando ressemble à un objet Object JScript, il existe toutefois certaines différences illustrées ici.
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.
Le résultat généré par ce code est le suivant :
10
ten
twelve
twelve
Exemple 2
L'exemple ci-dessous illustre une utilisation du modificateur expando sur une méthode. Lors d'un appel classique à la méthode expando, cette dernière accède au champ x. Lorsque la méthode est utilisée comme un constructeur explicite avec l'opérateur new, elle ajoute une propriété expando à un nouvel objet.
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.
Le résultat généré par ce code est le suivant :
Method called as a function.
123
456
123
Configuration requise
Voir aussi
Concepts
Portée des variables et des constantes