Модификатор expando

Объявляет, что экземпляры класса поддерживают свойства expando, или что метод является конструктором объектов expando.

expando statement

Аргументы

  • statement
    Обязательный. Определение класса или метода.

Заметки

Модификатор expando используется, чтобы помечать класс как динамически расширяемый (поддерживающий свойства expando). Для доступа к свойствам expando экземпляров классов expando используется нотация []; они недоступны при использовании оператора "точка". Модификатор expando также помечает метод как конструктор объектов expando.

Модификатором expando можно помечать классы и методы в классах. Поля, свойства интерфейсы и члены интерфейсов не могут принимать модификатор expando.

Класс expando имеет скрытое закрытое свойство Item, принимающее один параметр Object и возвращающее Object. Нельзя определять свойство с этой сигнатурой для класса expando.

Пример 1

В следующем примере показано, как используется модификатор expando для класса. Класс expando подобен Object в JScript, но существуют некоторые отличия, показанные здесь.

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.

В результате выполнения данного кода выводятся следующие данные:

10
ten
twelve
twelve

Пример 2

В следующем примере показано, как используется модификатор expando для метода. Когда метод expando вызывается обычным способом, он получает доступ к полю x. Когда этот метод используется в качестве явного конструктора с оператором new, он добавляет свойство expando к новому объекту.

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.

В результате выполнения данного кода выводятся следующие данные:

Method called as a function.
123
456
123

Требования

Версия .NET

См. также

Ссылки

Модификатор static

Оператор var

Оператор function

Оператор class

Основные понятия

Область переменных и констант

Аннотация типа

Другие ресурсы

Модификаторы