0Pricing
C# Academy · Урок

Статические методы и поля

Определяйте члены, принадлежащие самому типу.

«Статические методы и поля» — бесплатный урок C# Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения C# Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс C# Academy содержит 4 уроков всего.

Статические и нестатические члены

Член экземпляра принадлежит каждому объекту, а статический член — самому классу. Статический член существует ровно в одной копии, общей для всех.

using System;

class Counter
{
    public static int Total;   // shared
    public int Id;             // per instance
}

class Program
{
    static void Main()
    {
        Counter.Total = 5;
        Console.WriteLine("Shared Total: " + Counter.Total);
    }
}

Объявление статических полей

Доступ к полю static осуществляется через имя класса, а не через экземпляр: ClassName.Field.

using System;

class Bank
{
    public static decimal InterestRate = 0.05m;
}

class Program
{
    static void Main()
    {
        Console.WriteLine("Rate: " + Bank.InterestRate);
    }
}

Статические методы

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

using System;

class MathUtil
{
    public static int Square(int x)
    {
        return x * x;
    }
}

class Program
{
    static void Main()
    {
        Console.WriteLine(MathUtil.Square(7));
    }
}

Общее состояние экземпляров

Поскольку статическое поле существует в одной копии, каждый экземпляр видит одно и то же значение. Это полезно для счётчиков и общей конфигурации.

using System;

class Robot
{
    public static int Count;

    public Robot()
    {
        Count++;
    }
}

class Program
{
    static void Main()
    {
        new Robot();
        new Robot();
        new Robot();
        Console.WriteLine("Robots created: " + Robot.Count);
    }
}

Статические методы не используют данные экземпляра

У статического метода нет this, поэтому он может использовать только параметры, локальные переменные и другие статические члены.

using System;

class Calculator
{
    public static int Add(int a, int b) => a + b;
    public static int Multiply(int a, int b) => a * b;
}

class Program
{
    static void Main()
    {
        Console.WriteLine(Calculator.Add(2, 3));
        Console.WriteLine(Calculator.Multiply(4, 5));
    }
}

Сочетание статических и нестатических членов

Класс может содержать оба вида членов. Методы экземпляра могут читать статические члены, но статические методы не могут читать члены экземпляра.

using System;

class Account
{
    public static decimal Fee = 2m;
    public decimal Balance;

    public decimal NetBalance()
    {
        return Balance - Fee;   // instance method can read static
    }
}

class Program
{
    static void Main()
    {
        var a = new Account { Balance = 100m };
        Console.WriteLine("Net: " + a.NetBalance());
    }
}

Шаблон статического счётчика

Присвоение каждому новому объекту идентификатора из статического счётчика — классический способ использования статических полей.

using System;

class Ticket
{
    private static int _next = 1;
    public int Number;

    public Ticket()
    {
        Number = _next++;
    }
}

class Program
{
    static void Main()
    {
        Console.WriteLine(new Ticket().Number);
        Console.WriteLine(new Ticket().Number);
        Console.WriteLine(new Ticket().Number);
    }
}

Статические вспомогательные методы

Статические методы отлично подходят для операций без состояния, зависящих только от входных данных, например для форматирования и преобразования.

using System;

class Format
{
    public static string Money(decimal amount)
    {
        return "$" + amount.ToString("0.00");
    }
}

class Program
{
    static void Main()
    {
        Console.WriteLine(Format.Money(12.5m));
    }
}

Вызов статического метода из статического

Статические методы могут свободно вызывать другие статические методы того же класса без какого-либо экземпляра.

using System;

class Geometry
{
    public static double CircleArea(double r) => Math.PI * Square(r);
    private static double Square(double x) => x * x;
}

class Program
{
    static void Main()
    {
        Console.WriteLine(Geometry.CircleArea(2).ToString("0.00"));
    }
}

Статические поля сохраняются

Статическое поле сохраняет своё значение на протяжении всего времени работы программы, а не только в течение жизни одного объекта. Используйте это для кэшей или текущих итогов.

using System;

class Logger
{
    public static int MessageCount;

    public static void Log(string msg)
    {
        MessageCount++;
        Console.WriteLine("[" + MessageCount + "] " + msg);
    }
}

class Program
{
    static void Main()
    {
        Logger.Log("start");
        Logger.Log("working");
        Logger.Log("done");
    }
}

Объединение всего вместе

Статические члены описывают понятия, общие для всего класса: общие ставки, счётчики и вспомогательные методы без состояния, тогда как члены экземпляра хранят данные отдельного объекта.

using System;

class Order
{
    public static decimal TaxRate = 0.10m;
    public decimal Subtotal;

    public decimal Total() => Subtotal + Subtotal * TaxRate;
}

class Program
{
    static void Main()
    {
        var o = new Order { Subtotal = 200m };
        Console.WriteLine("Total: " + o.Total());
    }
}

Быстрая проверка

Проверьте, насколько хорошо Вы поняли статические члены.

Итоги

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

using System;

class Demo
{
    public static int Shared;
    public int Own;
    public static void Bump() => Shared++;
}

class Program
{
    static void Main()
    {
        Demo.Bump();
        Demo.Bump();
        Console.WriteLine(Demo.Shared);
    }
}

Часто задаваемые вопросы

Урок «Статические методы и поля» бесплатный?

Да — полный текст урока «Статические методы и поля» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс C# Academy, подпишись на CoddyKit PRO. Курс C# Academy содержит 4 уроков всего.

Чему я научусь в уроке «Статические методы и поля»?

Определяйте члены, принадлежащие самому типу. Ты практикуешь C# Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать C# Academy?

Предыдущий опыт не требуется. C# Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «Статические методы и поля»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке C# Academy?

Да. Каждый урок C# Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Статические методы и поля
  2. Статические классы для вспомогательных средств
  3. Константы и поля readonly
  4. Статические и экземплярные элементы
← Назад к C# Academy