无法使用实例引用进行访问

本文关键字:访问 引用 实例 | 更新日期: 2023-09-27 18:08:46

虽然我可以这样做:

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)'无法使用实例引用访问;用类型名来限定

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

提前感谢!

无法使用实例引用进行访问

Process.Start的所有参数重载都是静态的。如果你想使用第二种语法那么你必须首先设置实例状态也就是StartInfo的"filename"属性:

var proc = new Process();
proc.StartInfo.FileName = @"C:'MyFolder'MyProgram.cmd";
proc.Start();

注意这应该等同于System.Diagnostics.Process.Start(@"C:'MyFolder'MyProgram.cmd");,因为正如MSDN所说:"重载是创建新Process实例,设置StartInfo属性的FileName成员,并为Process实例调用Start的显式步骤的替代方法。"

这是一个静态方法。您不能在Process的实例上使用它:

public static Process Start(string fileName)

使用空的Start()方法,该方法被设计为在实例中工作:

启动(或重用)由process组件的StartInfo属性指定的进程资源,并将其与组件关联。

这是因为System.Diagnostics.Process.Start(string)是一个静态方法。

不能从该类的实例调用该类的静态成员。

这与通过this.MyStaticMethod()在实例方法中调用私有静态方法相同。

编辑:您可能希望设置进程的StartInfo,然后调用Start方法。