2011-12-30 5 views
5

J'ai écrit ceci et j'ai les erreurs suivantes. Y a-t-il un moyen simple de faire en sorte que les variables se voient les unes les autres?Variables de partage entre classes et méthodes

Avertissement 1 La variable 'notepad_running' est affectée mais sa valeur n'est jamais utilisée.

Erreur 2 Le nom «notepad_running» n'existe pas dans le contexte actuel.

Erreur 3 Le nom «notepad_list» n'existe pas dans le contexte actuel.

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; 
     } 
    } 
} 
+0

Saviez-vous que vous pouvez obtenir votre code revue à [CodeReview. SE] (http://codereview.stackexchange.com)? Il y a quelques problèmes de conception avec votre code sur lesquels vous pourriez recueillir des commentaires là-bas. – Adam

Répondre

1

Vous pouvez les faire public static. Ce serait un code approximatif refactorisé pour corriger vos erreurs de compilation.

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; 
     } 
    } 
} 
0
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; 
      } 
     } 
    } 

da da!

+1

Ce code va se plaindre d'avoir besoin d'une instance d'objet dans la ligne 'if (npc.notepad_running = 1)' car il a accédé à partir du contexte statique. Aussi la même erreur sur 'notepad_running = 1;' –

+0

Totalement correct. Corrigé cela. –

5

Vous pouvez le faire en mettant les propriétés statiques publiques notepad_check_class:

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

Cependant je suggère une seule classe:

public static class NotepadManager { 

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

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

} 
+0

+1 pour la solution ** real **. Une petite note sur le côté: 'Check()' pourrait probablement être 'private', et' Kill() 'pourrait appeler' Check() 'avant de faire quoi que ce soit d'autre. – Adam

Questions connexes