Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Windows Runtime-typen maken openbare gegevens beschikbaar als eigenschappen. Clientcode heeft toegang tot de eigenschap, zoals een openbaar datalid. Intern wordt de eigenschap geïmplementeerd als een blok dat een get accessor-methode, een set accessormethode of beide bevat. Met behulp van de toegangsmethoden kunt u extra acties uitvoeren voor of nadat u de waarde hebt opgehaald. U kunt bijvoorbeeld een gebeurtenis activeren of validatiecontroles uitvoeren.
Opmerkingen
De waarde van een eigenschap bevindt zich in een privévariabele, ook wel het backingarchief genoemd, dat hetzelfde type is als de eigenschap. Een eigenschap kan zowel een set accessor bevatten, die een waarde toewijst aan het backing-archief en een get-accessor waarmee de waarde van het back-uparchief wordt opgehaald. De eigenschap heeft het kenmerk Alleen-lezen als deze alleen een get-accessor biedt, alleen-schrijven als deze alleen een set accessor biedt en lezen/schrijven (kan worden gewijzigd) als deze beide accessors biedt.
Een triviale eigenschap is een lees-/schrijfeigenschap waarvoor de compiler automatisch de toegangs- en back-upopslag implementeert. U hebt geen toegang tot de implementatie van de compiler. U kunt echter een aangepaste eigenschap declareren en expliciet de toegangsbeheer- en back-upopslag declareren. Binnen een accessor kunt u alle logica uitvoeren die u nodig hebt, zoals het valideren van de invoer voor de ingestelde accessor, het berekenen van een waarde van de eigenschapswaarde, het openen van een database of het activeren van een gebeurtenis wanneer de eigenschap wordt gewijzigd.
Wanneer een C++/CX-refklasse wordt geïnstantieerd, wordt het geheugen nul geïnitialiseerd voordat de constructor wordt aangeroepen; daarom krijgen alle eigenschappen een standaardwaarde van nul of nullptr toegewezen aan het declaratiepunt.
Voorbeelden
In het volgende codevoorbeeld ziet u hoe u een eigenschap declareert en opent. De eerste eigenschap, Namewordt een triviale eigenschap genoemd, omdat de compiler automatisch een set accessor, get accessor en een back-uparchief genereert.
De tweede eigenschap, Doctoris een alleen-lezen eigenschap omdat hiermee een eigenschapsblok wordt opgegeven dat expliciet een get accessor declareert. Omdat het eigenschappenblok is gedeclareerd, moet u expliciet een back-uparchief declareren; Dat wil gezegd, de variabele private String^ . doctor_ Normaal gesproken retourneert een alleen-lezen eigenschap alleen de waarde van het back-uparchief. Alleen de klasse zelf kan de waarde van het back-uparchief instellen, meestal in de constructor.
De derde eigenschap, Quantityis een eigenschap lezen/schrijven, omdat het een eigenschapsblok declareert dat zowel een set accessor als een get accessor declareert.
De set accessor voert een door de gebruiker gedefinieerde geldigheidstest uit op de toegewezen waarde. En in tegenstelling tot C# is de naamwaarde hier alleen de id voor de parameter in de set accessor. Het is geen trefwoord. Als de waarde niet groter is dan nul, wordt Platform::InvalidArgumentException gegenereerd. Anders wordt de back-upopslag quantity_bijgewerkt met de toegewezen waarde.
Houd er rekening mee dat een eigenschap niet kan worden geïnitialiseerd in een ledenlijst. U kunt natuurlijk back-upopslagvariabelen initialiseren in een ledenlijst.
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;
}
};
Zie ook
Typesysteem
Naslaginformatie over C++/CX-taal
Naslaginformatie over naamruimten