Aracılığıyla paylaş


Ö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 Nameerişimci ve bir yedekleme deposu oluşturduğundan, ilk özelliği olan , önemsiz bir özellik olarak bilinir.

İkinci özellik olan , Doctoryalnı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 , Quantityhem 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;
    }
};

Ayrıca bkz.

Tür Sistemi
C++/CX Dil Başvurusu
Ad Alanları Başvurusu