2012-01-19 2 views
0

У меня есть вопрос, который может быть очень маленьким, но я застрял на нем последние 3 дня. У меня есть метод под названием ApplyRules, который используется очень часто, поэтому я не могу определить его внутри, но когда я пытаюсь определить его вне метода, он не читает его. Вот мой код:C# Логический внешний метод не будет читать

public bool solvedp1 = false; 

    public static void ApplyRules() 
    { 

     if (Level.Rooms[0, 0].GetItem("Red Gem") != null 
      & Level.Rooms[1, 0].GetItem("Blue Gem") != null 
      & solvedp1 == false) 
     { 
      Console.Clear(); 
      Console.WriteLine("You put the gem in its correct place. As soon as the gem is in position, you feel a shiver and a warm feeling enters your toes and passes through your whole body. The strange feeling in the room is gone. You hear a lock unlocking and a door shrieking as it opens.."); 
      Console.WriteLine("Press enter to continue"); 
      Console.ReadKey(); 
      solvedp1 = true; 
     } 
+1

Попробуйте назначить статическое ключевое слово для переменной solvep1 bool. –

+0

Решила поблагодарить вас –

ответ

1

Попробуйте это:

//Make this static so it is accessible to your ApplyRules() method. 
public static bool solvedp1 = false; 

public static void ApplyRules() 
{ 
    if (Level.Rooms[0, 0].GetItem("Red Gem") != null 
     & Level.Rooms[1, 0].GetItem("Blue Gem") != null 
     & solvedp1 == false) 
    { 
     Console.Clear(); 
     Console.WriteLine("You put the gem in its correct place. As soon as the gem is in position, you feel a shiver and a warm feeling enters your toes and passes through your whole body. The strange feeling in the room is gone. You hear a lock unlocking and a door shrieking as it opens.."); 
     Console.WriteLine("Press enter to continue"); 
     Console.ReadKey(); 
     solvedp1 = true; 
    } 
} 
5

Метод статичен, а булевский - основан на экземпляре. Сделайте либо логический статический, либо метод нестатический (возможно, измените логическое значение).

Поскольку статические методы не могут обращаться к переменным на основе экземпляра, ваш метод не может технически «видеть» логическое значение, потому что логическое значение связано с экземплярами вашего класса, а не с вашим классом в целом. Если класс, скажем, PuzzleSolver, для каждого и каждого экземпляра PuzzleSolver существует решаемое значение p1. Если есть только 1 PuzzleSolver, то вы должны сделать staticp1 статическим логическим (технически это делает ваш класс Singleton, который может быть «плохим» для долгосрочного, но это похоже на программу для учебных целей, а не на долгосрочный проект).

+0

Кажется работать, спасибо –

+0

несколько дополнительных советов по новичку: сообщение об ошибке компилятора, которое вы, вероятно, сказали, что-то загадочное, но действительно говорило вам именно об этом.в следующий раз, примите сообщение об ошибке компилятора и google, чтобы быстро найти помощь, расшифрующую проблему –

1

Ваша переменная является экземпляр переменной - то есть каждый экземпляр вашего класса будет иметь отдельную переменную.

Ваш метод является статическим методом - он не связан ни с каким конкретным экземпляром, поэтому нет переменной.

Непонятно, почему вы думаете, что нельзя объявлять переменную в методе только потому, что она используется очень часто. Вы должны решить, какой тип переменной делает смысл, и действовать соответственно:

  • Локальная переменная используется, когда естественное время жизни переменной является время жизни метода, то есть, когда метод завершается, переменная не имеет значения. Он не должен сохраняться между вызовами метода и т. Д.

  • Переменная экземпляра подходит, когда она является частью естественного состояния вашего класса - например, адрес человека может быть естественной переменной экземпляра для класса Person.

  • Статическая переменная подходит, когда она связана с самим типом, а не с каким-либо конкретным экземпляром типа. Статические переменные (за исключением констант) очень часто следует избегать, исходя из того, что это своего рода «глобальное» состояние, о котором трудно рассуждать, - это тоже сложно тестировать.

0

Добавить ключевое слово static в булево.

1

Статические методы не могут получить доступ к переменным экземпляра. Однако обратное верно, методы экземпляра могут обращаться к статическим переменным. Вы можете видеть это как: переменные экземпляра создаются только тогда, когда вы явно объявляете в этом классе, но статические переменные создаются, когда вы ссылаетесь на него в первый раз.