2011-11-25 111 views
1

我似乎有點混淆了下面的調用是如何工作的:這裏發生了什麼:Process.GetCurrentProcess()。MainModule.ModuleName ;?

string str = Process.GetCurrentProcess().MainModule.ModuleName; 

我知道這是一樣執行以下操作:

Process pvar = new Process(); 
ProcessModule pmvar = pvar.MainModule; 
string str2 = pmvar.ModuleName; 

但我需要一個詳細解釋它是如何可能的前。請致電MainModule類別中的非靜態屬性ProcessModule因爲我沒有明確創建Process類的實例!

GetCurrentProcess()方法是否自動創建一個實例來處理,因爲它不需要這樣做?

回答

11

尚未創建的Process的實例,但它返回一個給你:

Process process = Process.GetCurrentProcess(); 

這是非常不同於new Process()叫你在第二個片段已經有了。所以,你的第一個語句相當於實際上

Process process = Process.GetCurrentProcess(); 
ProcessModule module = process.MainModule; 
string moduleName = module.ModuleName; 

GetCurrentProcess()返回代表當前正在執行的過程中Process對象的引用。

1

GetCurrentProcess返回實例的引用。它可能是一個新創建的實例,或者是某種緩存對現有實例的引用。反正它是一個實例,可以用來調用MainModule獲取器。

1

按照MSDN documentation,這是GetCurrentProcess的行爲:

使用此方法來創建一個新的流程實例,並將其與本地計算機上的進程資源關聯。

相關問題