2010-05-01 6 views
0

Serait-il possible de créer un handle (ou un handle de suivi) vers une propriété d'une classe? Par exemple,Création d'un handle vers la propriété d'une classe

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

J'aimerais créer une poignée Box propriété Vérifié de et de l'utiliser pour accéder et modifier les mêmes.

Répondre

1

Les propriétés sont un peu plus que du sucre syntaxique pour les méthodes set/get, et il est, AFAIK, aucun moyen de capturer toute sorte de référence à un (quelque chose s'apparente à une méthode liée, je suppose).

La meilleure solution que je peux penser, ce qui nécessite VS2010, est de passer quelques lambdas autour de:

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

EDIT (puisque vous n'avez pas VS2010):

Vous pouvez bien bien sûr revenir à la convention plus baroque d'écrire une classe spéciale à usage:

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; 
}; 

Si quelqu'un vous demande jamais ce que C++ lambdas sont bons pour, il est difficile de passer devant cet exemple .

+0

Je vois. J'ai peur que ce n'est pas une option cependant. Je suppose que j'attendrai une autre réponse pour confirmer/contredire la vôtre. Merci pour la réponse rapide. – shadeMe

+0

Ah, ça devrait m'aider à traverser la nuit. Merci beaucoup! – shadeMe