Изменить тип управления по типу - PullRequest
0 голосов
/ 30 марта 2010

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

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

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

Ответы [ 2 ]

4 голосов
/ 30 марта 2010

Справедливо ли предположить, что вы управляете типами, имеющими CustomPropertyOfControl? Если это так, заставьте их реализовать интерфейс и приведите к этому интерфейсу.

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

Теперь в C # 4 вы могли бы сделать это, используя динамическую типизацию:

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

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

1 голос
/ 30 марта 2010

Хотя 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 }); 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...