我有一个问题,这可能是非常高兴的,但过去3天我一直坚持这个问题。我有一个名为ApplyRules的方法,它经常使用,因此我无法在其中定义bool,但是当我尝试在方法之外定义它时,它不会读取它。这是我的代码:
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;
}
答案 0 :(得分:5)
该方法是静态的,而布尔值是基于实例的。使布尔静态或方法非静态(可能更改布尔值)。
因为静态方法无法访问基于实例的变量,所以您的方法在技术上不能“看到”布尔值,因为布尔值与您的类的实例相关联,而不是整个类。如果该类是,例如,PuzzleSolver,则每个PuzzleSolver实例都有一个solvep1布尔值。如果只有1个PuzzleSolver,那么你应该让solvep1成为一个静态布尔值(从技术上讲,这会使你的类成为一个单例,从长远来看这可能是'坏',但这似乎是一个用于学习目的的程序而不是一个长期项目)。
答案 1 :(得分: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;
}
}
答案 2 :(得分:1)
您的变量是实例变量 - 即您的类的每个实例都有一个单独的变量。
您的方法是静态方法 - 它与任何特定实例无关,因此没有可用的变量。
不清楚为什么你认为你不能仅仅因为它“非常频繁地使用”而在方法中声明变量。你应该决定什么样的变量使 sense ,并采取相应的行动:
当变量的自然寿命是方法的生命周期时,局部变量是合适的,即当方法完成时,变量是无关紧要的。它不需要在方法调用等之间持续存在。
当一个实例变量属于您的类的自然状态时,它是合适的 - 例如一个人的地址可能是Person
类的自然实例变量。
当一个静态变量与该类型本身相关联而不是该类型的任何特定实例时,它是合适的。静态变量(常数除外)应该经常被避免,理由是它是一种很难理解的“全局”状态 - 它也会使测试变得困难。
答案 3 :(得分:1)
静态方法无法访问实例变量。但事实恰恰相反,实例方法可以访问静态变量。 您可以将其视为:实例变量仅在您在该类的实例中显式声明时创建,但是,静态变量是在您第一次引用时创建的。
答案 4 :(得分:0)
将static关键字添加到布尔值。