我遇到以下問題。
我應該控制轉換爲某種類型,這可以是多種類型的
(例如自定義按鈕或自定義標籤,....)
這裏是我想去做的例子:按類型更改控件類型
private void ConvertToTypeAndUseCustomProperty(Control c)
{
Type type = c.getType();
((type) c).CustomPropertieOfControl = 234567;
}
在此先感謝
我遇到以下問題。
我應該控制轉換爲某種類型,這可以是多種類型的
(例如自定義按鈕或自定義標籤,....)
這裏是我想去做的例子:按類型更改控件類型
private void ConvertToTypeAndUseCustomProperty(Control c)
{
Type type = c.getType();
((type) c).CustomPropertieOfControl = 234567;
}
在此先感謝
儘管4.0之前的C#不支持動態類型分辨率,但它可以通過一點反射來實現。
private void ConvertToTypeAndUseCustomProperty(Control c)
{
PropertyInfo p = c.GetType().GetProperty("CustomPropertieOfControl");
if (p == null)
return;
p.SetValue(c, new object[] { 234567 });
}
它是公平的假設,你控制哪些有「CustomPropertyOfControl」的類型?如果是這樣,讓他們全部實現一個接口,並投射到該接口。
鑄造的一點是要告訴你知道,它沒有編譯器的東西 - 在編譯時。這裏你不知道編譯時的類型。如果你知道一些基類或接口,那麼你可以告訴編譯器那沒有問題。
現在,在C#4你可以做到這一點使用動態類型:
private void ConvertToTypeAndUseCustomProperty(Control c)
{
dynamic d = c;
d.CustomPropertyOfControl = 234567;
}
然而,即使你可以做到這一點,我還是建議用靜態類型,如果在所有可能的堅持 - 如果你有一組類型都有一些共同的功能,給它們一個通用的接口。