这里发生了什么:Process.GetCurrentProcess()。MainModule.ModuleName;?

时间:2011-11-25 21:39:50

标签: c# .net

我似乎对以下呼叫的工作原理有点困惑:

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

我知道它与执行以下操作相同:

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

但是我需要一个详细的解释如何可以ex。在类 ProcessModule 中调用 MainModule 非静态属性,因为我没有明确地创建 Process 类的实例!

GetCurrentProcess()方法是否会自动创建一个可以使用的实例,因为它不需要这样做?

4 个答案:

答案 0 :(得分:10)

尚未创建Process的实例,但这会为您返回一个:

Process process = Process.GetCurrentProcess();

这与您在第二个片段中遇到的new Process()电话有很大不同。所以你的第一个语句实际等同于:

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

GetCurrentProcess()返回对表示当前正在执行的进程的Process对象的引用。

答案 1 :(得分:2)

GetCurrentProcess()的调用会返回Process个实例 - 您的第二个代码片段并非真正发生的事情......

答案 2 :(得分:1)

GetCurrentProcess返回对实例的引用。它可以是新创建的实例,也可以是某种缓存中对现有实例的引用。无论如何它是一个实例,可用于调用MainModule getter。

答案 3 :(得分:1)

根据MSDN documentation,这是GetCurrentProcess的行为:

  

使用此方法创建新的Process实例并将其与本地计算机上的流程资源相关联。