使用其他方法中的实例化对象

本文关键字:实例化 对象 方法 其他 | 更新日期: 2023-09-27 18:28:40

关于oop有一些我还不能理解的地方!可能已经有人问过了,但我找不到,我发现的唯一一个例子是关于使用singleton,但这不是一个建议的方法。

假设这是我的主要代码:

private void main()
{
    Process task1 = null;
    task1 = new Process();
    task1.StartInfo.FileName = something.bat;
    task1.StartInfo.Arguments = string.Format("10");
    task1.StartInfo.CreateNoWindow = false;
    task1.Start();
    task1.WaitForExit();
    Update();
}

然后在另一种方法中,我需要重新调用已经使用过的相同对象:

private static void Update()
{
    task1.Start();
    task1.WaitForExit();
}

这段代码可能有错误,但我只需要理解实例的概念。

有人能帮忙吗?

感谢并祝你新年快乐

使用其他方法中的实例化对象

在两个函数之外全局声明并初始化它,那么您应该能够使用相同的对象

Process task1 = null;
task1 = new Process();
private void main()
{
     task1.StartInfo.FileName = something.bat;
     ............
}
private void Update()
{
   task1.Start();
   task1.WaitForExit();
}

或者你可以直接将变量传递给你的更新方法

void main()
{
            Process task1 = null;
            task1 = new Process();
            task1.StartInfo.FileName = something.bat;
            task1.StartInfo.Arguments = string.Format("10");
            task1.StartInfo.CreateNoWindow = false;
            task1.Start();
            task1.WaitForExit();
            Update(task1);
}

并且在更新方法中

private void update(Process taskin)
{
   taskin.Start();
   taskin.WaitForExit();
}

回答您关于实例概念的问题。与其说是实例概念,不如说是变量的范围。

private void main()
{
    Process task1 = null;
    task1 = new Process();
    task1.StartInfo.FileName = something.bat;
    task1.StartInfo.Arguments = string.Format("10");
    task1.StartInfo.CreateNoWindow = false;
    task1.Start();
    task1.WaitForExit();
    Update();
}

在上面的代码中,Process task1 = null;初始化变量,然后在下一行通过task1 = new Process();设置它,就像在void Main()方法中一样,现在这些变量的作用域是这个方法。

Update()方法是一个完全独立的方法,并且对Main()方法中初始化的变量没有可见性。如果你需要一个将在同一类的许多方法中使用的变量,sajeetharan的答案是正确的,我会补充说,在你的情况下,如果可能的话,试着声明一个私有字段。

要阅读更多关于作用域的信息,请查看.Net 中的变量和方法作用域

如果您想在整个代码中只对单个对象进行操作,可以使用Singleton类:

public class SingleProc
{
  private static SingleProc instance;
  private SingleProc() { }
  public Process Proc { get; set; }
  public static void RunTillExit()
  {
    Instance.Proc.Start();
    Instance.Proc.WaitForExit();
  }
  public static SingleProc Instance
  {
    get
    {
      if (instance == null)
      {
        instance = new SingleProc();
      }
      return instance;
    }
  }
}

设置属性:

SingleProc.Instance.Proc.StartInfo.FileName = "something.bat";
SingleProc.Instance.Proc.StartInfo.Arguments = string.Format("10");
SingleProc.Instance.Proc.StartInfo.CreateNoWindow = false;

以及您需要的任何地方:致电RunTillExit:

SingleProc.RunTillExit();