如果以靜態知道基類的類型,強制轉換爲該類型。例如:
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