【问题标题】:Cannot Access with an Instance Reference无法使用实例引用访问
【发布时间】:2016-09-23 20:54:27
【问题描述】:

虽然我可以这样做:

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)”;改为使用类型名称对其进行限定。

这背后的原因是什么?谁能解释一下?

提前致谢!

【问题讨论】:

标签: c# system.diagnostics


【解决方案1】:

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 实例、设置 StartInfo 属性的 FileName 成员和调用 Start 的显式步骤的替代方法用于 Process 实例。”

【讨论】:

  • 感谢 Quantic。这真的很有帮助。
【解决方案2】:

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

public static Process Start(string fileName)

使用空的Start() method,用于处理实例:

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

【讨论】:

  • 非常感谢@Jonesopolis。
【解决方案3】:

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

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

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

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

【讨论】:

  • 谢谢马吕斯。作为初学者,一切都感觉像是动态的,那么静态方法就来了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多