2010-03-30 73 views
0

我遇到以下問題。
我應該控制轉換爲某種類型,這可以是多種類型的
(例如自定義按鈕或自定義標籤,....)
這裏是我想去做的例子:按類型更改控件類型

private void ConvertToTypeAndUseCustomProperty(Control c) 
{ 
    Type type = c.getType(); 
    ((type) c).CustomPropertieOfControl = 234567; 
} 

在此先感謝

回答

1

儘管4.0之前的C#不支持動態類型分辨率,但它可以通過一點反射來實現。

private void ConvertToTypeAndUseCustomProperty(Control c) 
{ 
    PropertyInfo p = c.GetType().GetProperty("CustomPropertieOfControl"); 
    if (p == null) 
    return; 
    p.SetValue(c, new object[] { 234567 }); 
} 
4

它是公平的假設,你控制哪些有「CustomPropertyOfControl」的類型?如果是這樣,讓他們全部實現一個接口,並投射到該接口。

鑄造的一點是要告訴你知道,它沒有編譯器的東西 - 在編譯時。這裏你不知道編譯時的類型。如果你知道一些基類或接口,那麼你可以告訴編譯器沒有問題。

現在,在C#4你可以做到這一點使用動態類型:

private void ConvertToTypeAndUseCustomProperty(Control c) 
{ 
    dynamic d = c; 
    d.CustomPropertyOfControl = 234567; 
} 

然而,即使你可以做到這一點,我還是建議用靜態類型,如果在所有可能的堅持 - 如果你有一組類型都有一些共同的功能,給它們一個通用的接口。