Создание дескриптора свойства класса

Можно ли создать дескриптор (или дескриптор отслеживания) для свойства класса? Например,

System::Windows::Forms::CheckBox^ Box = gcnew System::Windows::Forms::CheckBox()

Я хочу создать дескриптор свойства Checked Box и использовать его для доступа и изменения его.


person shadeMe    schedule 01.05.2010    source источник


Ответы (1)


Свойства - это не более чем синтаксический сахар для методов set/get, и, насколько мне известно, нет никакого способа зафиксировать какую-либо ссылку на один из них (я полагаю, что-то вроде связанного метода).

Лучший обходной путь, который я могу придумать, для которого требуется VS2010, - передать пару лямбда-выражений:

auto set = [=](bool b) { Box->Checked = b; };
auto get = [=]() -> bool { return Box->Checked; };

РЕДАКТИРОВАТЬ (поскольку у вас нет VS2010):

Конечно, вы можете вернуться к более причудливому соглашению о написании класса специального назначения:

public generic<typename T> interface class PropertyProxy
{
    property T Field;
};

public ref class CheckBoxChecked : public PropertyProxy<bool>
{
public:
    CheckBoxChecked(System::Windows::Forms::CheckBox^ box) : _box(box) { }
    property bool Field
    {
        bool get() { return _box->Checked; };
        void set(bool b) { _box->Checked = b; };
    }

private:
    System::Windows::Forms::CheckBox^ _box;
};

Если кто-нибудь когда-нибудь спросит вас, для чего хороши лямбда-выражения C++, трудно пройти мимо этого примера.

person Marcelo Cantos    schedule 01.05.2010
comment
Понимаю. Хотя, боюсь, это не вариант. Думаю, я подожду другого ответа, чтобы подтвердить/опровергнуть ваш. Спасибо за быстрый ответ. - person shadeMe; 01.05.2010