Static c#

Static c#

Всем доброго времени суток. На связи Алексей Гулынин. В прошлой статье вы узнали про extension-методы в C#. В данной статье я бы хотел поговорить про статические классы в C#. Кроме модификатора доступа, перед названием поля, метода или свойства можно написать ключевое слово "static". "Static" означает, что данное поле, метод или свойство будет принадлежать не каждому объекту класса, а всем им вместе. Классический пример: как определить сколько объектов одного класса было создано? Для решения данного вопроса, как раз и служат статические поля.

Давайте разберем на примере с комнатами. Напишем класс "Room":

public class Room
{
  // Если мы напишем вот так: "public int count;", то данное поле
  // будет у каждого объекта, и у каждого объекта оно будет своё.
  // Причем, если не создано ни одного объекта, то это поле не будет существовать вообще
  // Поэтому делаем это поле статическим
  public static int count;
  // Создадим конструктор, в котором будем увеличить count при создании объекта
  public Room()
  {
    count++;
  }
  // Также напишем статический метод, который выводит количество созданных объектов
  public static void ShowNumberOfObjects()
  {
    Console.WriteLine(Room.count.ToString());
  }
}
class Program
{
  static void Main(string[] args)
  {
    // Давайте посмотрим чему равно count без создания объектов
    Room.ShowNumberOfObjects(); // выйдет 0, т.к. мы пока не создали ни одного объекта
    // Создадим 3 комнаты
    Room room1 = new Room();
    Room room2 = new Room();
    Room room3 = new Room();
    Room.ShowNumberOfObjects(); // выйдет 3
    Console.ReadLine();
   }
}

Статический метод позволяет вызывать метод, не имея в наличии ни одного объекта. Вместо имени объекта указывается имя класса:

Room.ShowNumberOfObjects();

Отличия статического метода от нестатического:

  1. Для вызова статического метода не нужен объект.
  2. Внутри статического метода недоступна переменная "this", соответственно недоступны все нестатические поля этого класса, т.к. как нет объекта.
  3. Внутри обычного метода доступны как статические, так и нестатические поля.

В C# 4.0 появилась возможность и сам класс сделать статическим:

public static class Room

Иногда создают классы, которые состоят только из статических методов. По сути, такие классы являются контейнерами и это отходит от концепции ООП. Таким образом, публично статические классы являются глобальными функциями. Также нельзя создавать экземпляры статического класса.

В данной статье вы узнали про ключевое слово static в C#.

На связи был Алексей Гулынин, оставляйте свои комментарии, увидимся в следующих статьях.


Комментарии:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *