C# 按类型更改控件的类型

C# 按类型更改控件的类型,c#,wpf,properties,types,C#,Wpf,Properties,Types,我有以下问题。 我应该将控件转换为特定类型,这可以是多种类型 (例如自定义按钮或自定义标签等) 下面是我想做的一个例子: private void ConvertToTypeAndUseCustomProperty(Control c) { Type type = c.getType(); ((type) c).CustomPropertieOfControl = 234567; } 提前感谢假设您控制具有“CustomPropertyOfControl”的类型是否公平?如

我有以下问题。
我应该将控件转换为特定类型,这可以是多种类型
(例如自定义按钮或自定义标签等)
下面是我想做的一个例子:

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

提前感谢

假设您控制具有“CustomPropertyOfControl”的类型是否公平?如果是这样,那么让它们都实现一个接口,并转换到该接口

强制转换的要点是在编译时告诉编译器一些你知道它不知道的事情。在这里,您不知道编译时的类型。如果您知道一些基类或接口,那么您可以毫无问题地告诉编译器

现在在C#4中,您可以使用动态键入来实现这一点:

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

然而,即使你可以做到这一点,如果可能的话,我仍然建议你坚持使用静态类型——如果你有一组类型都有一些共同的功能,给它们一个共同的接口。

假设你控制了具有“CustomPropertyOfControl”的类型是否公平?如果是这样,那么让它们都实现一个接口,并转换到该接口

强制转换的要点是在编译时告诉编译器一些你知道它不知道的事情。在这里,您不知道编译时的类型。如果您知道一些基类或接口,那么您可以毫无问题地告诉编译器

现在在C#4中,您可以使用动态键入来实现这一点:

private void ConvertToTypeAndUseCustomProperty(Control c)
{
    dynamic d = c;
    d.CustomPropertyOfControl = 234567;
}
然而,即使你能做到这一点,我还是建议尽可能坚持使用静态类型——如果你有一组类型都有一些共同的功能,给它们一个共同的接口。

尽管4.0之前的C#不支持VB那样的动态类型解析,它可以通过一点反射来实现

private void ConvertToTypeAndUseCustomProperty(Control c) 
{ 
   PropertyInfo p = c.GetType().GetProperty("CustomPropertieOfControl"); 
   if (p == null)
     return;
   p.SetValue(c, new object[] { 234567 }); 
}
虽然4.0之前的C#不象VB那样支持动态类型解析,但它可以通过一点反射来实现

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