property (расширения компонентов C++)

Объявляет свойство, которое является функцией-членом, чье поведение и доступ к которому как у члена данных или элемента массива.

Все среды выполнения

Можно объявить один из следующих типов свойств.

  • простое свойство
    По умолчанию создает метод доступа set, который присваивает значение, метод доступа get, который получает значение, и сгенерированный компилятором закрытый член данных, который содержит значение свойства.

  • блок свойства
    Используйте этот параметр для создания определяемых пользователем методов доступа get и/или set. Свойство доступно для чтения и записи, если указаны оба метода доступа get и set, только для чтения, если указан только метод доступа get, и только для записи, если указан только метод доступа set.

    Необходимо явно объявить, что элемент данных содержит значение свойства.

  • индексированное свойство
    Блок свойства, которое можно использовать для получения и задания значения свойства, которое определяется одним или несколькими индексами.

    Можно создать индексированное свойство с определяемым пользователем именем свойства или с именем свойства по умолчанию. Имя свойства индекса по умолчанию — это имя класса, в котором определено свойство. Для объявления свойства по умолчанию укажите ключевое слово default вместо имени свойства.

    Необходимо явно объявить, что элемент данных содержит значение свойства. Для индексированного свойства член данных обычно в массиве или коллекции.

Синтаксис

property type property_name;

   property type property_name { 
      access-modifier type get() inheritance-modifier {property_body}; 
      access-modifier void set(type value) inheritance-modifier {property_body};
   } 

   property type property_name[index_list] { 
      access-modifier type get(index_list) inheritance-modifier {property_body}; 
      access-modifier void set(index_list, value) inheritance-modifier {property_body};
   } 

   property type default[index_list] { 
      access-modifier type get(index_list) inheritance-modifier {property_body};
      access-modifier void set(index_list, value) inheritance-modifier {property_body};
   }

Параметры

  • type
    Тип данных значения свойства и, следовательно, само свойство.

  • property_name
    Имя свойства.

  • access-modifier
    Квалификатор доступа. Допустимыми квалификаторами являются static и virtual.

    Методы доступа get и set не должны быть согласованы с квалификатором virtual, но они должны быть согласованы с квалификатором static.

  • inheritance-modifier
    Квалификатор наследования. Допустимыми квалификаторами являются abstract и sealed.

  • index_list
    Разделенный запятыми список одного или нескольких индексов. Каждый индекс состоит из типа индекса и необязательного идентификатора, который можно использовать в теле метода свойства.

  • value
    Значение, присваиваемое свойству в операции set, или получаемое в операции get.

  • property_body
    Тело метода свойства метода доступа set или get. Параметр property_body может использовать index_list для доступа к основному члену данных свойства или в качестве параметров в определяемой пользователем обработке.

Среда выполнения Windows

Дополнительные сведения см. в разделе: Свойства (C++/CX).

Требования

Параметр компилятора: /ZW

Среда CLR

Синтаксис

modifier property type property_name;

modifier property type property_name {
   modifier void set(type);
   modifier type get();
}
modifier property type property_name[index-list, value] {
   modifier void set(index-list, value);
   modifier type get(index-list);

modifier property type default[index];
}

Параметры

  • modifier
    Модификатор, который можно использовать для объявления свойства или метода доступа get и set. Допустимые значения: static и virtual.

  • type
    Тип значения, который представляется свойством.

  • property_name
    Параметр(ы) для вызова метода; должны совпадать сигнатуре делегата.

  • index_list
    Список одного или нескольких индексов, разделенных запятыми, указанных в квадратных скобках (оператор индекса, ([])). Для каждого индекса укажите тип и, при необходимости, идентификатор, который можно использовать в теле метода свойства.

Примечания

В первом примере синтаксиса показано простое свойство, которое неявно определяет методы set и get. Компилятор автоматически создает закрытое поле для хранения значения свойства.

Во втором примере синтаксиса показан блок свойства, который явно определяет методы set и get.

В третьем примере синтаксиса показано определяемое клиентом свойство индекса. Свойство индекса принимает параметры в дополнение к значению, которое должно быть установлено или извлечено. Необходимо указать имя для свойства. В отличие от простого свойства, методы set и get свойства индекса должны быть явно определены, и необходимо указать имя свойства.

В четвертом примере синтаксиса показано свойство по умолчанию, которое предоставляет доступ к экземпляру объекта, аналогичный доступу к массиву. Ключевое слово default служит только для определения свойства по умолчанию. Имя свойства по умолчанию — это имя типа, в котором определено свойство.

Ключевое слово property может находиться в классе, интерфейсе или типе значения. Свойство может содержать функцию get (только для чтения), функцию set (только для записи) или обе этих функции (для чтения и записи).

Имя свойства не может совпадать с именем управляемого класса, содержащего данный элемент. Функция получения свойства должна иметь тип, который совпадает с типом последнего параметра в соответствующей функции задания свойства.

Для клиентского кода свойство имеет вид обычного члена данных и может быть записано и считано путем использования того же синтаксиса, что и у члена данных.

Методы get и set не требуется согласовывать с модификатором virtual.

Уровень доступа методов get и set может отличаться.

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

Методы get и set для свойства должны согласовываться с модификатором static.

Свойство скалярно, если его методы get и set подходят под следующее описание:

  • У метода get нет параметров, и он имеет тип возвращаемого значения — T.

  • Метод set имеет параметр типа T и возвращаемый тип void.

Будет только одно скалярное свойство, объявленное в области с тем же идентификатором. Скалярные свойства не могут быть перегружены.

Когда объявлен член данных свойства, компилятор вставляет в классе член данных, иногда называемый "резервное хранилище". Однако имя члена данных такой формы, что нельзя ссылаться на член в источнике как если бы он был членом фактических данных содержащего класса. С помощью ildasm.exe можно просматривать метаданные для типа и просмотреть созданное компилятором имя резервного хранилища для свойства.

Разные уровни доступа поддерживаются для методов доступа в блоке свойства. То есть, метод set может быть открытым, и метод get может быть закрытым. Однако будет ошибка, если метода доступа имеет менее строгий уровень доступа, чем тот, что в объявлении свойства.

property — это контекстно-зависимое ключевое слово. Для получения дополнительной информации см. Контекстные ключевые слова (расширения компонентов C++).

Дополнительные сведения о свойствах см. в разделах

Требования

Параметр компилятора: /clr

Примеры

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

// mcppv2_property.cpp
// compile with: /clr
using namespace System;
public ref class C {
   int MyInt;
public:

   // property data member
   property String ^ Simple_Property;

   // property block
   property int Property_Block {

      int get();

      void set(int value) {
         MyInt = value;
      }
   }
};

int C::Property_Block::get() {
   return MyInt;
}

int main() {
   C ^ MyC = gcnew C();
   MyC->Simple_Property = "test";
   Console::WriteLine(MyC->Simple_Property);

   MyC->Property_Block = 21;
   Console::WriteLine(MyC->Property_Block);
}

Output

  
  

См. также

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

Расширения компонентов для платформ среды выполнения