3. Переменные. Модификаторы доступа. Статические пременные и переменные экземпляра.

Переменные

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

int x = 1;  // x равно 1
x = 2;      // а теперь 2

Константа является другим типом поля. Она хранит значение, присваиваемое по завершении компиляции программы, и никогда после этого не изменяется. Константы объявляются помощью ключевого слова const; их использование способствует повышению удобочитаемости кода.

const int speedLimit = 55;
const double pi = 3.14159265358979323846264338327950; // нельзя изменить во время иполнения программы

Модификаторы доступа

  • public: публичный, общедоступный класс или член класса. Такой член класса доступен из любого места в коде, а также из других программ и сборок.
    • private: закрытый класс или член класса. Представляет полную противоположность модификатору public. Такой закрытый класс или член класса доступен только из кода в том же классе или контексте.
    • protected: такой член класса доступен из любого места в текущем классе или в производных классах.
    • internal: класс и члены класса с подобным модификатором доступны из любого места кода в той же сборке, однако он недоступен для других программ и сборок (как в случае с модификатором public).
    • protected internal: совмещает функционал двух модификаторов. Классы и члены класса с таким модификатором доступны из текущей сборки и из производных классов.

Static

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

В методе типа static должна отсутствовать ссылка this, поскольку такой метод не выполняется относительно какого-либо объекта

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

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

Пример. Статичные переменные и переменные экземпляра

В классе Person переменная count является статичной, а age - переменной экземпляра. Метод growUp является методом экземпляра, а метод countNewPerson - статическим методом.

class Person
{
  public static ing count = 0; // Число существующих людей

  public int age; // Возраст конкретного человека

  public Person(int age){
    this.age = age;

    countNewPerson();
  }

  public void growUp(){
    this.age += 1;
  }

  private static void countNewPerson(){
    count += 1;
  }
}

Использование Person

Person person = new Person(20);

// count - статическое поле. Обращаемся к нему через класс
Console.WriteLine(Person.count); // Выводит 1

Person another = new Person(25);

Console.WriteLine(Person.count); // Выводит 2

// growUp - метод экземпляра, работает с конкретным объектом
person.growUp();
Console.WriteLine(person.age); // Выводит 21
// Возраст `another` не поменялся
Console.WriteLine(another.age); // Выводит 25

results matching ""

    No results matching ""