如果以静态知道基类的类型,强制转换为该类型。例如:
void AddToList(List<Control> list, string typeName) {
var control = (Control)Activator.CreateInstance(typeName);
list.Add(control);
}
然后
var list = new List<Control>();
AddToList(list, "Button"):
AddToList(list, "Label"):
AddToList(list, "ListBox"):
如果需要以后做一些类型特异性,可以测试的类型和投:
foreach (Control child in list)
DoSomethingWithThe(control);
void DoSomethingWithThe(Control control)
{
Button button = control as Button;
if (button != null)
{
button.Click += Button_Click;
return;
}
Label label = control as Label;
if (label != null)
{
label.MouseOver += Label_MouseOver;
return;
}
//... etc.
}
或者使用OfType方法:
foreach (Button button in list.OfType<Button>())
button.Click += Button_Click;
foreach (Label label in list.OfType<Label>())
label.MouseOver += Label_MouseOver;
您还可以使用反映离子,但这相当麻烦,所以我不会举一个例子。如果您有一个与在基类型的不同子类型上定义的名称相同的属性,但不在基类型上,则反射会很有用。如果有许多子类型,类型检查会变得麻烦,所以反射可能是更好的方法。
你在施放后想用'instance'做什么? – JaredPar
只是将其添加到基类型列表 – user2994682