2010-03-30 5 views
0

J'ai un problème suivant.
je convertir un contrôle à un certain type, cela peut être plusieurs types
(par exemple un bouton ou une étiquette personnalisée, ....)
Voici un exemple de ce que je voudrais faire:Changer le type de contrôle par type

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

Merci à l'avance

Répondre

1

Bien que C#, avant 4.0, ne supporte pas la résolution de type dynamique comme le fait VB, il peut être réalisé avec un peu de réflexion.

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

Est-il juste de supposer que vous contrôlez les types qui ont « CustomPropertyOfControl »? Si c'est le cas, faites en sorte qu'ils implémentent tous une interface, et cast à cette interface.

Le point d'un transtypage est de dire au compilateur quelque chose que vous savez qu'il ne connaît pas - au moment de la compilation. Ici, vous ne connaissez pas le type au moment de la compilation. Si vous connaissez une classe de base ou une interface, alors vous pouvez dire au compilateur que sans problème.

maintenant en C# 4 vous pourrait faire en utilisant le typage dynamique:

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

Cependant, même si vous pouvez faire cela, je recommande toujours coller avec le typage statique, si possible - Si vous avez un groupe de types qui ont tous des fonctionnalités communes, donnez-leur une interface commune.

Questions connexes