C # static - что означает определение в MSDN? - PullRequest
2 голосов
/ 20 июня 2010

Используйте модификатор static, чтобы объявить статический член, который принадлежит самому типу, а не конкретному объекту.

???

Моя встречаэто статическое ключевое слово произошло, когда я определил переменную public int abc.Когда значение этой переменной изменялось в скобках while, или в скобках if, или в скобках методов, эти изменения были недействительными, не отражались, не были известны за скобками.Так что просто пробная версия.Я сделал переменную статической и все проблемы были решены.

Но почему ??

Ответы [ 4 ]

6 голосов
/ 20 июня 2010

Разница между статическим и нестатическим элементом (не переменным) заключается в том, что статический элемент уникален в течение всего времени выполнения программы (т. Е. Существует только один экземпляр статического элемента), тогда как нестатический элемент связан с экземпляром объекта (т. е. существует экземпляр члена для каждого экземпляра соответствующего объекта). Это в нескольких словах, что говорит определение.

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

3 голосов
/ 20 июня 2010

Если у вас есть класс:

public class Car {
   public static readonly int Wheels = 4;
   public static int Count {get;set;}
   public string Make {get;set;}
   public string Model {get;set;}
   public int Year {get;set;}

   public Car() { Car.Count = Car.Count + 1; }

   public string SoundOff(){
       return String.Format("I am only 1 out of {0} car{1}", 
              Car.Count, (Car.Count > 0 ? "s" : String.Empty));
   }
}

Затем, каждый раз, когда вы создаете машину, количество увеличивается на единицу. Это связано с тем, что свойство Count принадлежит классу Car, а не объекту, который вы создали.

Это также полезно, потому что каждый автомобиль может иметь знание Car.Count. Итак, если вы создали:

Car sportster = new Car { 
   Make="Porsche", Model="Boxster", Year=2010  };
sportster.SoundOff(); // I am only 1 out of 1 car

Вы можете выполнить другую обработку, и Count будет известен всем объектам:

Car hybrid = new Car { Make="Toyota", Model="Prius", Year=2010 };
hybrid.SoundOff(); // I am only 1 out of 2 cars
sportster.SoundOff(); // I am only 1 out of 2 cars

Итак, другими словами, вы должны использовать static, когда хотите что-то:

  • Быть доступным на уровне класса, чтобы об этом знали все объекты (Car.Count вместо hybrid.Count)
  • Представляет класс, а не объект (Car.Wheels не изменится)

Существуют и другие причины использовать статические, такие как классы утилит, методы расширения и т. Д. Но это должно ответить на ваш вопрос о формулировке MSDN.

3 голосов
/ 20 июня 2010

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

1 голос
/ 20 июня 2010

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

Изменяя его на статический, все экземпляры делят одну и ту же копию переменной члена.

Наблюдаемое вами поведение, вероятно, указывает на проблему в выражениях while и if.Если вы отправите пример кода, я мог бы помочь в дальнейшем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...