我似乎对以下呼叫的工作原理有点困惑:
string str = Process.GetCurrentProcess().MainModule.ModuleName;
我知道它与执行以下操作相同:
Process pvar = new Process();
ProcessModule pmvar = pvar.MainModule;
string str2 = pmvar.ModuleName;
但是我需要一个详细的解释如何可以ex。在类 ProcessModule 中调用 MainModule 非静态属性,因为我没有明确地创建 Process 类的实例!
GetCurrentProcess()方法是否会自动创建一个可以使用的实例,因为它不需要这样做?
答案 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实例并将其与本地计算机上的流程资源相关联。