1
我有一個函數,我想使泛型來顯示錶單。我希望函數檢查表單是否已經打開,如果沒有創建窗體的新實例並顯示它,則將其置於頂端。Casting type to object in C#
檢查表單是否打開的第一部分都是好的,但是我從T中創建並創建了一個新的T型表單對象。我已經使用這行代碼創建了一個形式爲obj = Activator.CreateInstance<T>();
的實例,但是它不顯示intellisense中的所有方法和屬性。代碼Form x = new Form1. x
將顯示所有的方法和屬性。
我相信我在這裏做錯了什麼,請給我照亮一些光。
private static void ShowForm<T>()
{
T obj = default(T);
List<T> opened = FormManager.GetListOfOpenForms<T>();
if (opened.Count == 0)
{
// not opened
// obj does not show all properties and methods
obj = Activator.CreateInstance<T>();
// x shows all properties and methods
frmLogin x = new frmLogin();
}
else
{
// opened
}
}
無參數構造函數的約束是否真的有用? – LightStriker
+1。 @LightStriker,是的,它將允許刪除對CreateInstance的不必要的反射調用。 –
@AlexeiLevenkov:實際上,'new T()'編譯爲Activator.CreateInstance。該約束將運行時錯誤轉換爲編譯時錯誤。 – SLaks