Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
среда выполнения Windows типы предоставляют общедоступные данные в качестве свойств. Клиентский код обращается к свойству как открытым данным-членам. Внутренне свойство реализуется в виде блока, содержащего метод доступа get или set, или оба эти метода. С помощью методов доступа можно выполнять дополнительные действия до или после получения значения; например, можно вызывать события или выполнять проверки.
Замечания
Значение свойства содержится в закрытой переменной (называемой резервным хранилищем), принадлежащей к тому же типу, что и само свойство. Свойство может одновременно содержать метод доступа set, присваивающий значение резервному хранилищу, и метод доступа get, извлекающий значение резервного хранилища. Свойство доступно только для чтения, если оно предоставляет только метод доступа get, только для записи, если предоставляет только метод доступа set, и для чтения и записи, если предоставляет оба метода доступа.
Тривиальное свойство — это свойство, доступное для чтения и записи, для которого компилятор автоматически реализует методы доступа и резервное хранилище. Доступ к реализации компилятора для вас невозможен. Впрочем, вы можете объявить пользовательское свойство и явно объявить его методы доступа и резервное хранилище. Внутри метода доступа можно реализовать любую необходимую логику, например проверку входных данных метода доступа set, вычисление значения с использованием значения свойства или вызов события при изменении свойства.
Когда создается экземпляр класса ссылки C++/CX, его память перед вызовом конструктора инициализируется нулями, таким образом, всем свойствам в качестве значения по умолчанию назначается ноль или nullptr.
Примеры
В следующем примере кода показано, как объявить свойство и обратиться к нему. Первое свойство Nameявляется тривиальным , поскольку компилятор автоматически создает метод доступа set , метод доступа get и резервное хранилище.
Второе свойство Doctorдоступно только для чтения, поскольку для него указан блок property , в котором явно объявлен только метод доступа get . Поскольку блок property объявлен, необходимо явно объявить резервное хранилище, то есть закрытую переменную doctor_класса String^. Обычно свойство, доступное только для чтения, просто возвращает значение резервного хранилища. Только сам класс может задавать значение резервного хранилища, обычно это происходит в конструкторе.
Третье свойство Quantityдоступно для чтения и записи, так как в нем объявлен блок property, где объявлены оба метода доступа set и get .
Метод доступа set выполняет определенную пользователем проверку допустимости присваиваемого значения. В отличие от C#, здесь имя value — это просто идентификатор параметра в методе доступа set , оно не является ключевым словом. Если value не больше нуля, вызывается исключение Platform::InvalidArgumentException. В противном случае резервному хранилищу quantity_задается присваиваемое значение.
Обратите внимание, что свойство невозможно инициализировать в списке членов. Хотя переменные резервного хранилища можно инициализировать в списке членов.
public ref class Prescription sealed
{
private:
Platform::String^ m_doctor;
int quantity;
public:
Prescription(Platform::String^ name, Platform::String^ d) : m_doctor(d)
{
// Trivial properties can't be initialized in member list.
Name = name;
}
// Trivial property
property Platform::String^ Name;
// Read-only property
property Platform::String^ Doctor
{
Platform::String^ get() { return m_doctor; }
}
// Read-write property
property int Quantity
{
int get() { return quantity; }
void set(int value)
{
if (value <= 0)
{
throw ref new Platform::InvalidArgumentException();
}
quantity = value;
}
}
};
public ref class PropertyConsumer sealed
{
private:
void GetPrescriptions()
{
Prescription^ p = ref new Prescription("Louis", "Dr. Who");
p->Quantity = 5;
Platform::String^ s = p->Doctor;
int32 i = p->Quantity;
Prescription p2("JR", "Dr. Dat");
p2.Quantity = 10;
}
};
См. также
Система типов
Справочник по языку C++/CX
Справочник по пространствам имен