【问题标题】:Share variables between classes and methods在类和方法之间共享变量
【发布时间】:2012-01-30 07:34:11
【问题描述】:

我写了这个,我得到了以下错误。有什么简单的方法可以让变量互相看到吗?

警告 1 变量“notepad_running”已赋值,但从未使用过它的值。

错误 2 当前上下文中不存在名称“notepad_running”。

错误 3 当前上下文中不存在名称“notepad_list”。

public class notepad_check_class
{
    public static void notepad_check()
    {
        Process [] notepad_list = Process.GetProcessesByName("notepad");
        if (notepad_list.Length > 0)
        {
            int notepad_running = 1;
        }
    }
}

public class kill_notepad_class
{
    public static void kill_notepad()
    {
        notepad_check_class.notepad_check();
        if (notepad_running = 1)
        {
            if (MessageBox.Show("Are you sure you want to kill all notepad processes?", "Question", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
            foreach (Process notepad_process in notepad_list)
            {
                notepad_process.Kill();
            }
            return;
        }
        else
        {
            MessageBox.Show("Cannot find any running process of notepad.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            return;
        }
    }
}

【问题讨论】:

  • 您知道您可以通过codereview.SE 审查您的代码吗?您的代码存在一些设计问题,您可以在那里收集反馈。

标签: c# class variables methods


【解决方案1】:

您可以通过将公共静态属性放入 notepad_check_class 来做到这一点:

public static Process[] NotepadList { set; get; }
public static int NotepadRunning { set; get; }

不过我建议只上一节课:

public static class NotepadManager {

  private static Process[] NotepadList { set; get; }
  private static int NotepadRunning { set; get; }

  public static void Check() { ... }
  public static void Kill() { ... }

}

【讨论】:

  • +1 表示 real 解决方案。旁边的一个小注释:Check() 可能是privateKill() 可以在做任何其他事情之前调用Check()
【解决方案2】:

您可以将它们设为public static。这将是一个粗略的代码重构以修复您的编译错误。

public class notepad_check_class
{
    public static Process[] notepad_list;
    public static bool notepad_running;

    public static void notepad_check()
    {
        notepad_list = Process.GetProcessesByName("notepad");

        notepad_running = notepad_list.Length > 0;
    }
}

public class kill_notepad_class
{
    public static void kill_notepad()
    {
        notepad_check_class.notepad_check();

        if (notepad_check_class.notepad_running)
        {
            if (MessageBox.Show("Are you sure you want to kill all notepad processes?", "Question", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                foreach (Process notepad_process in notepad_check_class.notepad_list)
                {
                    notepad_process.Kill();
                }
            return;
        }
        else
        {
            MessageBox.Show("Cannot find any running process of notepad.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            return;
        }
    }
}

【讨论】:

    【解决方案3】:
     public class notepad_check_class
        {
            public int notepad_running;
            public static void notepad_check(notepad_check_class npc)
            {
                Process [] notepad_list = Process.GetProcessesByName("notepad");
                if (notepad_list.Length > 0)
                {
                    npc.notepad_running = 1;
                }
            }
        }
    
        public class kill_notepad_class
        {
            public notepad_check_class npc;
            public kill_notepad_class() {
               npc = new notepad_check_class();
            }
            public static void kill_notepad()
            {
                notepad_check_class.notepad_check(notepad_check_class npc);
                if (npc.notepad_running = 1)
                {
                    if (MessageBox.Show("Are you sure you want to kill all notepad processes?", "Question", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                        foreach (Process notepad_process in notepad_list)
                        {
                            notepad_process.Kill();
                        }
                    return;
                }
                else
                {
                    MessageBox.Show("Cannot find any running process of notepad.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }
            }
        }
    

    哒哒!

    【讨论】:

    • 此代码将抱怨在if (npc.notepad_running = 1) 行中需要一个对象实例,因为它是从静态上下文访问的。 notepad_running = 1; 也有同样的错误
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-28
    • 1970-01-01
    • 2011-12-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多