property
(C++/CLI и C++/CX)
Объявляет свойство, являющееся функцией-членом, которая действует и доступна как элемент данных или элемент массива.
Все среды выполнения
Можно объявить один из следующих типов свойств.
Простое свойство
По умолчанию создается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
Параметры для raise
метода; должны соответствовать сигнатуре делегата.
index_list
Список с разделителями-запятыми одного или нескольких индексов, указанный в квадратных скобках (оператор подстроки, []
). Для каждого индекса укажите тип и (необязательно) идентификатор, который может использоваться в теле метода свойства.
Замечания
В первом примере синтаксиса показано простое свойство, которое неявно объявляет методы set
и get
. Компилятор автоматически создает закрытое поле для хранения значения свойства.
Во втором примере синтаксиса показан блок свойств, который явно объявляет методы set
и get
.
В третьем примере синтаксиса показано определяемое пользователем свойство индекса. Свойство индекса принимает параметры, а также значение для установки или получения. Укажите имя свойства. В отличие от простого свойства, set
необходимо явно определить и get
методы свойства индекса, поэтому необходимо указать имя свойства.
В четвертом примере синтаксиса показано свойство по умолчанию, которое предоставляет подобный массиву доступ к экземпляру типа. Ключевое слово, default
служит только для указания свойства по умолчанию. Имя свойства по умолчанию — это имя типа, в котором это свойство определено.
Ключевое property
слово может отображаться в классе, интерфейсе или типе значений. Свойство может иметь get
функцию (только для чтения), set
функцию (только для записи) или оба (чтение и запись).
Имя свойства не может совпадать с именем управляемого класса, содержащего его. Функция получения свойства должна иметь тип, который совпадает с типом последнего параметра в соответствующей функции задания свойства.
В отношении клиентского кода свойство имеет вид обычного элемента данных и может записываться или считываться с помощью того же синтаксиса, что и элемент данных.
Методы get
и методы не должны согласиться с модификаторомvirtual
.set
Специальные возможности get
метода set
могут отличаться.
Определение метода свойства может отображаться за пределами тела класса, так же, как в случае обычного метода.
Метод get
свойства должен согласиться с модификаторомstatic
.set
Свойство скалярно, если его get
методы set
соответствуют следующему описанию:
Метод
get
не имеет параметров и имеет тип возвращаемого значенияT
.Метод
set
имеет параметр типаT
и возвращаемый типvoid
.
Должно существовать только одно скалярное свойство, объявленное в области с тем же идентификатором. Скалярные свойства не могут быть перегружены.
При объявлении элемента данных свойства компилятор вставляет элемент данных — иногда называемый «резервным хранилищем» — в класс. Однако имя элемента данных представляет собой форму, такую что вы не можете ссылаться на элемент в источнике, как если бы это был фактический член данных содержащего класса. Используйте Ildasm.exe для просмотра метаданных для вашего типа и созданного компилятором имени для резервного хранилища свойства.
В блоке свойств разрешается разная доступность для методов доступа. То есть set
метод может быть public
и get
метод может быть private
. Тем не менее, это ошибка для метода доступа, чтобы иметь менее ограничивающие специальные возможности, чем то, что находится в объявлении самого свойства.
property
— контекстно-зависимое ключевое слово. Дополнительные сведения см. в разделе "Ключевые слова с учетом контекста".
Требования
Параметр компилятора: /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);
}
test
21