2010-05-01 54 views
0

是否可以創建類屬性的句柄(或跟蹤句柄)?例如,創建類屬性的句柄

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

我想創建一個句柄的Checked屬性,並用它來訪問和修改相同。

回答

1

屬性只是語法糖的set/get方法,並且AFAIK沒有辦法捕獲任何類型的引用(類似於綁定方法,我想)。

我能想到的最好的解決方法,這需要VS2010,是通過一對夫婦的lambda表達式的周圍:

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

EDIT(因爲你沒有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++ lambda表達式是良好的,很難去過去的這個例子。

+0

我明白了。恐怕這不是一個選項。我想我會等待另一個答案來確認/反駁你的。感謝您的快速回答。 – shadeMe 2010-05-01 06:33:58

+0

啊,那應該會幫助我度過這個夜晚。非常感謝! – shadeMe 2010-05-01 13:41:53