Объектно-ориентированный стиль программирования кратко можно описать таким образом:
Таким образом, в процессе выполнения программы непосредственно действуют объекты. Однако в некоторых случаях естественнее считать, что действия выполняются самим классом. Хорошим примером является класс Math – все его методы вызываются от имени класса:
Console.WriteLine(Math.Sin(0.5)+Math.Cos(0.5)); |
---|
Было бы довольно странно для вычисления математических функций сначала создавать объект-«математику»:
Math m1=new Math(); Math m2=new Math(); Console.WriteLine(m1.Sin(0.5)+m2.Cos(0.5)) |
---|
Это означало бы, что можно создавать несколько «математик». Но ведь они все должны действовать абсолютно одинаково.
Аналогично дело обстоит и с переменными – бывают случаи, когда некоторые данные естественнее представлять не как порцию информации, принадлежащую объекту, а классу в целом.
В классе Math эта ситуация встречается при доступе к тригонометрической константе - Math.PI.
Элементы класса (переменные и методы), которые соотносятся не с объектами, а с классом, называются статическими. В описании статических элементов используется ключевое слово static.
Статические переменные описываются и хранятся в классе в единственном числе.
В отличие от статических членов обычные элементы класса называются элементами экземпляров класса – методы экземпляров и переменные экземпляров. Переменные экземпляра описываются в классе и хранятся в объектах класса.
Класс Person моделирует ситуацию, когда множество людей располагают некоторым общим запасом пищи и делят его поровну.
Количество пищи FoodQuantity и количество людей PeopleCount – характеристики всей совокупности людей. Поэтому они описаны как статические переменные.
Метод Description описывает состояние всего множества людей и также является статическим методом.
Статические методы могут использовать только статические переменные и другие статические методы класса. Попытка использовать в методе Description переменную Weight привела бы к ошибке компилятора.
В классе Program:
Результат: