2010-03-30 4 views
0

У меня возникла следующая проблема.
я должен преобразовать элемент управления к определенному типу, это может быть несколько типов
(например, пользовательские кнопки или пользовательские этикетки, ....)
Вот пример того, что я хотел бы сделать:Изменить тип управления по типу

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

заранее спасибо

ответ

1

Хотя C#, до версии 4.0, не поддерживает разрешение динамического типа, как это делает VB, это может быть достигнуто с небольшим отражением.

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

Однако, даже если вы может сделать это, я бы до сих пор рекомендую придерживаться статической типизации, если вообще возможно - если у вас есть группа типов, все из которых имеют общую функциональность, дайте им общий интерфейс.

Смежные вопросы