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#.
На связи был Алексей Гулынин, оставляйте свои комментарии, увидимся в следующих статьях.




