无法使用实例参考进行访问

时间:2016-09-23 20:54:28

标签: c# system.diagnostics

虽然我可以这样做:

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)';用类型名称来限定它。

这背后的原因是什么?有人可以解释一下吗?

提前致谢!

3 个答案:

答案 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()在实例方法中调用私有静态方法相同。

编辑:您可能想要设置流程的StartInfo,然后调用Start方法。