Özellikler (C++/CX)
Windows Çalışma Zamanı türleri genel verileri özellik olarak kullanıma sunar. İstemci kodu özelliğine genel veri üyesi gibi erişir. Dahili olarak özelliği get accessor yöntemi, ayarlanmış erişimci yöntemi veya her ikisini içeren bir blok olarak uygulanır. Erişimci yöntemlerini kullanarak, değeri almadan önce veya aldıktan sonra ek eylemler gerçekleştirebilirsiniz; örneğin, bir olayı tetikleyebilir veya doğrulama denetimleri gerçekleştirebilirsiniz.
Açıklamalar
Bir özelliğin değeri, özelliğiyle aynı türdeki bir özel değişkende (yedekleme deposu olarak bilinir) bulunur. Özellik, hem yedekleme deposuna bir değer atayan bir küme erişimcisini hem de yedekleme deposunun değerini alan bir get erişimcisini içerebilir. Özellik yalnızca bir get erişimcisi, yalnızca bir küme erişimcisi sağlıyorsa salt yazma ve her iki erişimciyi de sağlıyorsa okuma/yazma (değiştirilebilir) sağlarsa salt okunurdur.
Önemsiz özellik, derleyicinin erişimcileri ve yedekleme depolarını otomatik olarak uyguladığı bir okuma/yazma özelliğidir. Derleyicinin uygulamasına erişiminiz yok. Ancak, özel bir özellik bildirebilir ve erişimcilerini ve yedekleme deposunu açıkça bildirebilirsiniz. Erişimci içinde, küme erişimcisine girişi doğrulama, özellik değerinden bir değer hesaplama, veritabanına erişme veya özellik değiştiğinde bir olay tetikleme gibi ihtiyacınız olan herhangi bir mantığı gerçekleştirebilirsiniz.
C++/CX başvuru sınıfı örneği başlatıldığında, oluşturucu çağrılmadan önce belleği sıfır başlatılır; bu nedenle tüm özelliklere bildirim noktasında sıfır veya nullptr varsayılan değeri atanır.
Örnekler
Aşağıdaki kod örneği, bir özelliğin nasıl bildirilip erişilip bildirilip erişilemini gösterir. derleyici otomatik olarak bir set
erişimci, get
Name
erişimci ve bir yedekleme deposu oluşturduğundan, ilk özelliği olan , önemsiz bir özellik olarak bilinir.
İkinci özellik olan , Doctor
yalnızca erişimciyi açıkça bildiren bir özellik bloğu belirttiğinden salt okunur bir get
özelliktir. Özellik bloğu bildirildiğinden, açıkça bir yedekleme deposu bildirmeniz gerekir; yani, özel String^ değişkeni, doctor_
. Genellikle salt okunur bir özellik yalnızca yedekleme deposunun değerini döndürür. Genellikle oluşturucuda yedekleme deposunun değerini yalnızca sınıfın kendisi ayarlayabilir.
Üçüncü özellik olan , Quantity
hem erişimci hem de set
erişimci get
bildiren bir özellik bloğu bildirdiğinden bir okuma-yazma özelliğidir.
Erişimci, set
atanan değer üzerinde kullanıcı tanımlı bir geçerlilik testi gerçekleştirir. C# dilinden farklı olarak, burada ad değeri yalnızca erişimcideki set
parametrenin tanımlayıcısıdır; anahtar sözcük değildir. Değer sıfırdan büyük değilse Platform::InvalidArgumentException oluşturulur. Aksi takdirde, yedekleme deposu, quantity_
atanan değerle güncelleştirilir.
Bir özelliğin üye listesinde başlatılamadığını unutmayın. Elbette bir üye listesinde yedekleme deposu değişkenlerini başlatabilirsiniz.
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;
}
};