我遇到了以下问题
我应该将控件转换为某种类型,这可以是多种类型
(例如自定义按钮或自定义标签,....)
这是我想做的一个例子:
private void ConvertToTypeAndUseCustomProperty(Control c)
{
Type type = c.getType();
((type) c).CustomPropertieOfControl = 234567;
}
提前致谢
答案 0 :(得分:4)
假设您控制具有“CustomPropertyOfControl”的类型是否公平?如果是这样,让它们全部实现一个接口,并转换为该接口。
强制转换的目的是告诉编译器你知道它不是 - 在编译时。这里你不知道编译时的类型。如果您知道一些基类或接口,那么您可以告诉编译器 没有问题。
现在在C#4中,可以使用动态输入执行此操作:
private void ConvertToTypeAndUseCustomProperty(Control c)
{
dynamic d = c;
d.CustomPropertyOfControl = 234567;
}
然而,即使你可以这样做,我仍然建议尽可能坚持使用静态类型 - 如果你有一组所有类型都具有一些共同功能,请给出他们是一个共同的界面。
答案 1 :(得分:1)
虽然在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 });
}