property (C++/CLI и C++/CX)

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

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

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

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

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

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

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

    Вы можете создать индексированное свойство, которое имеет либо заданное пользователем имя, либо имя по умолчанию. Имя свойства индекса по умолчанию — это имя класса, в котором это свойство определено. Чтобы объявить свойство по умолчанию, укажите 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
Квалификатор доступа. Допустимые квалификаторы и staticvirtual.

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

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

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

value
Значение, которое нужно назначить свойству в set операции или получить в get операции.

property_body
Текст метода свойства или setget метода доступа. Он 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

См. также

Расширения компонентов для .NET и UWP