Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
A Windows futtatókörnyezet típusai tulajdonságokként teszik elérhetővé a nyilvános adatokat. Az ügyfélkód úgy fér hozzá a tulajdonsághoz, mint egy nyilvános adatelem. A tulajdonság belsőleg egy blokkként van implementálva, amely tartalmaz egy get accessor metódust, egy beállított tartozékmetódust vagy mindkettőt. A kiegészítő módszerek használatával további műveleteket hajthat végre az érték lekérése előtt vagy után, például aktiválhat egy eseményt, vagy érvényesítési ellenőrzéseket hajthat végre.
Megjegyzések
A tulajdonság értéke egy privát változóban ( más néven háttértárban) található, amely megegyezik a tulajdonság típusával. A tulajdonság tartalmazhat egy készlethez tartozó kiegészítőt is, amely egy értéket rendel a háttértárhoz, valamint egy get kiegészítőt, amely lekéri a háttértár értékét. A tulajdonság írásvédett, ha csak beolvasási kiegészítőt, írásvédettet biztosít, ha csak egy beállított tartozékot biztosít, és olvasási/írási (módosítható), ha mindkét tartozékot biztosítja.
A triviális tulajdonság egy olvasási /írási tulajdonság, amelyhez a fordító automatikusan implementálja a tartozékokat és a háttértárat. Nincs hozzáférése a fordító implementálásához. Deklarálhat azonban egy egyéni tulajdonságot, és explicit módon deklarálhatja annak tartozékait és háttértárolóját. A tartozékon belül bármilyen szükséges logikát végrehajthat, például érvényesítheti a beállított tartozék bemenetét, kiszámíthat egy értéket a tulajdonságértékből, hozzáférhet egy adatbázishoz, vagy aktiválhat egy eseményt, amikor a tulajdonság megváltozik.
C++/CX ref osztály példányosításakor a memóriája nulla inicializálva lesz a konstruktor meghívása előtt; ezért minden tulajdonsághoz nulla vagy nullptr alapértelmezett érték van rendelve a deklarálási ponton.
Példák
Az alábbi példakód bemutatja, hogyan deklarálhat és érhet el egy tulajdonságot. Az első tulajdonság, az úgynevezett triviális tulajdonság, Namemivel a fordító automatikusan létrehoz egy set tartozékot, get egy tartozékot és egy háttértárat.
A második tulajdonság egy írásvédett tulajdonság, Doctormivel olyan tulajdonságblokkot határoz meg, amely kifejezetten csak egy tartozékot get deklarál. Mivel a tulajdonságblokk deklarálva van, explicit módon deklarálnia kell egy háttértárat; azaz a private String^ változó. doctor_ Egy írásvédett tulajdonság általában csak a háttértár értékét adja vissza. A háttértár értékét csak maga az osztály állíthatja be, általában a konstruktorban.
A harmadik tulajdonság egy írási-olvasási tulajdonság, Quantitymert deklarál egy tulajdonságblokkot, amely a tartozékot set és a tartozékot get is deklarálja.
A set tartozék felhasználó által meghatározott érvényességi tesztet végez a hozzárendelt értéken. A C#-sal ellentétben itt a névérték csak a tartozék paraméterének set azonosítója, nem kulcsszó. Ha az érték nem nagyobb nullánál, akkor a platform::InvalidArgumentException ki lesz dobva. Ellenkező esetben a háttértár quantity_frissül a hozzárendelt értékkel.
Vegye figyelembe, hogy egy tulajdonság nem inicializálható taglistában. Természetesen inicializálhatja a háttértár változóit egy taglistában.
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;
}
};
Lásd még
Típus rendszer
C++/CX nyelvi referencia
Névterek – referencia