我現在正在使用VB,而VB有一個令人討厭的功能,稱爲「默認窗體實例」,當您引用窗體類而不是表單實例時,該窗體對象將創建一個默認實例。替換默認窗體實例
例如:
public class frmMain
Inherits System.Windows.Forms.Form
end class
private Sub Sub1
frmMain.Show()
end Sub
上面編譯代碼,並沒有錯誤,因爲當您通過類名調用它運行時給你frmMain的新實例中運行。
的問題是:
有沒有一種方法,以取代實例的默認實例,我創造出來的? 另一種說法是:有沒有辦法將我創建的實例設置爲默認實例?
對於那些想請問誰「爲什麼地球上,你會需要這樣的東西嗎?」:
我有這樣的應用程序,讓我們稱之爲MyApplication.exe
,這是一個Windows窗體應用程序和frmMain
是主要形式。 應用程序中主表單的許多引用都是通過默認實例來實現的,直到現在,該實例才能正常工作。 我正在對應用程序進行一些更改。不必直接運行MyApplication.exe
,我必須動態加載程序集並通過反射運行。下面是我該怎麼做:
Dim assembly As Reflection.Assembly = LoadAssembly("MyApplication.exe")
Dim frm As Object = assembly.CreateInstance("MyApplication.frmMain")
frm.Show()
我創建並通過反射顯示frmMain
的實例。稍後,當應用程序嘗試通過默認實例訪問frmMain
時,運行時會創建一個新的frmMain
實例,因爲它認爲默認實例尚未存在。但是現在默認實例和屏幕上的實例是不同的對象。
底線是:通過反思,我試圖模仿直接運行MyApplication.exe的確切行爲。