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();
Отличия статического метода от нестатического:
- Для вызова статического метода не нужен объект.
- Внутри статического метода недоступна переменная "this", соответственно недоступны все нестатические поля этого класса, т.к. как нет объекта.
- Внутри обычного метода доступны как статические, так и нестатические поля.
В C# 4.0 появилась возможность и сам класс сделать статическим:
public static class Room
Иногда создают классы, которые состоят только из статических методов. По сути, такие классы являются контейнерами и это отходит от концепции ООП. Таким образом, публично статические классы являются глобальными функциями. Также нельзя создавать экземпляры статического класса.
В данной статье вы узнали про ключевое слово static в C#.
На связи был Алексей Гулынин, оставляйте свои комментарии, увидимся в следующих статьях.