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);
}
Вывод