虽然我可以这样做:
System.Diagnostics.Process.Start(@"C:\MyFolder\MyProgram.cmd");
我不能这样做:
var process = new System.Diagnostics.Process();
process.Start(@"C:\MyFolder\MyProgram.cmd");
错误:无法使用实例引用访问成员'System.Diagnostics.Process.Start(string)';用类型名称来限定它。
这背后的原因是什么?有人可以解释一下吗?
提前致谢!
答案 0 :(得分:4)
Process.Start
的所有参数化重载都是静态的。如果你想使用第二种语法,那么你必须首先设置实例状态,它只是"文件名" StartInfo
的属性:
var proc = new Process();
proc.StartInfo.FileName = @"C:\MyFolder\MyProgram.cmd";
proc.Start();
请注意,这应该等同于System.Diagnostics.Process.Start(@"C:\MyFolder\MyProgram.cmd");
,因为MSDN表示:"重载是创建新Process实例的显式步骤的替代方法,设置FileName成员StartInfo属性,并为Process实例调用Start。"
答案 1 :(得分:2)
它是一种静态方法。您无法在Process
:
public static Process Start(string fileName)
使用专为解决实例而设计的空Start() method:
启动(或重用)此Process组件的StartInfo属性指定的进程资源,并将其与组件关联。
答案 2 :(得分:2)
那是因为System.Diagnostics.Process.Start(string)
是静态方法。
您无法从该类型的实例调用类的静态成员。
与通过this.MyStaticMethod()
在实例方法中调用私有静态方法相同。