2010-09-10 3 views
0

Я хочу увеличить «BrainsEaten» каждый раз, когда любой экземпляр Zombie выполняет EatBrains. Как я могу это сделать?Универсальная переменная?

namespace ZombieLand 
{ 
    public int BrainsEaten; // <- This is syntactically incorrect, but illustrates what I want 

    public class Zombie 
    { 
     public void EatBrains() 
     { 
      BrainsEaten++; 
     } 
    } 
} 
+3

Вам нужно будет создать методы, когда зомби съедят другие части тела. – Adam

+0

@Adam Возможно, часть тела может быть передана как параметр. – Carlos

ответ

8

, что вы описываете, называется глобальной переменной, и они не существуют в C#.

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

Например:

namespace Zomebieland 
{ 
    public class Zombie 
    { 
     public static int BrainsEaten {get; private set;} 

     public void EatBrains() 
     { 
      BrainsEaten++; 
     } 
    } 
} 

Это сделал две вещи: он переместил декларацию BrainsEaten внутри Zombie класса и сделал это static. Кроме того, я превратил его в свойство с общедоступным get и частным set, поэтому класс Zombie может назначить (или, в данном случае, приращение) значение, но код за пределами класса Zombie может только считывать значение.

+0

Будет ли использование статических классов показывать признаки неэффективности, если 12 миллионов мозгов съедены? – sooprise

+0

@Soo: На самом деле наоборот. Если вы опускаете статическое ключевое слово, то каждый экземпляр Zombie имеет int как часть его памяти. Тогда у вас есть 12 м мозгов, которые, помимо того, что они не синхронизированы, являются огромной потерей памяти. Подумайте о статической переменной (а не статическом классе) в качестве переменной, которая является глобальной и общей, но только внутри класса. Верьте или нет, это действительно достаточно хорошо для всех приложений. –

+0

@Soo: класс значения не будет вести себя иначе, независимо от того, сколько раз вы его увеличиваете. –

0

Используйте статическую переменную-член внутри вашего класса:

public static int BrainsEaten; 

Это становится глобальной переменной общей для всех объектов класса. Вы не можете объявить его снаружи как часть пространства имен.

0

Сделать переменную BrainsEaten статичным, как это:

public static int BrainsEaten; 

И, конечно, нужно определить переменную внутри класса.

0

Сделать это статической переменной.

public static int BrainsEaten; 
Смежные вопросы