是否可以(通过反射?)迭代对象的所有字段,并在每个字段上调用一个方法。
我有一堂课是这样的:
public class Overlay
{
public Control control1;
public Control control2;
}
我想要一个像这样的方法:
public void DrawAll()
{
Controls[] controls = "All instances of Control"
foreach (Control control in Controls)
{
control.Draw()
}
}
这可以做到吗?我已经能够获取 Control 类的所有元数据,但这仅与类型相关,而不与特定实例相关。
我知道这看起来很奇怪,但我有我的理由。我使用的是 Unity 3D,每个控件实际上都是由编辑器实例化的 GUI 控件。
谢谢你的帮助。
public class Program
{
static void Main(string[] args)
{
Overlay overlay = new Overlay();
foreach (FieldInfo field in overlay.GetType().GetFields())
{
if(typeof(Control).IsAssignableFrom(field.FieldType))
{
Control c = field.GetValue(overlay) as Control;
if(c != null)
c.Draw();
}
}
}
}
注意:这将过滤掉类中非控件的字段。还,可分配自 http://msdn.microsoft.com/en-us/library/system.type.isassignablefrom.aspx将为从 Control 继承的任何字段类型返回 true,假设您也希望处理这些字段。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)