0Pricing
C# Academy · Урок

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

Группируйте вспомогательные функции в статических классах.

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

Что такое статический класс

Статический класс объявляется с помощью static class. Он может содержать только статические члены и не может быть создан как экземпляр. Это естественное место для вспомогательных функций.

using System;

static class StringUtils
{
    public static string Shout(string s) => s.ToUpper() + "!";
}

class Program
{
    static void Main()
    {
        Console.WriteLine(StringUtils.Shout("hello"));
    }
}

Экземпляры создать нельзя

Для статического класса нельзя использовать new. Доступ ко всему осуществляется непосредственно через имя класса.

using System;

static class MathUtils
{
    public static int Cube(int x) => x * x * x;
}

class Program
{
    static void Main()
    {
        // No instance needed
        Console.WriteLine(MathUtils.Cube(3));
    }
}

Разрешены только статические члены

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

using System;

static class Temperature
{
    public static double ToFahrenheit(double c) => c * 9 / 5 + 32;
    public static double ToCelsius(double f) => (f - 32) * 5 / 9;
}

class Program
{
    static void Main()
    {
        Console.WriteLine(Temperature.ToFahrenheit(100));
        Console.WriteLine(Temperature.ToCelsius(32));
    }
}

Объединение связанных вспомогательных функций

Статический класс объединяет функции одной тематики и предоставляет им понятное пространство имён, например Validation.IsEmail(...).

using System;

static class Validation
{
    public static bool IsPositive(int n) => n > 0;
    public static bool IsEmail(string s) => s.Contains("@") && s.Contains(".");
}

class Program
{
    static void Main()
    {
        Console.WriteLine(Validation.IsPositive(5));
        Console.WriteLine(Validation.IsEmail("a@b.com"));
    }
}

Встроенный математический класс

Класс Math в .NET является статическим. Создавать его экземпляр не нужно: достаточно вызвать Math.Sqrt, Math.Max и другие методы.

using System;

class Program
{
    static void Main()
    {
        Console.WriteLine(Math.Max(3, 9));
        Console.WriteLine(Math.Sqrt(144));
        Console.WriteLine(Math.Round(3.14159, 2));
    }
}

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

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

using System;

static class Pricing
{
    public static decimal Tax = 0.08m;

    public static decimal WithTax(decimal price) => price + price * Tax;
}

class Program
{
    static void Main()
    {
        Console.WriteLine(Pricing.WithTax(100m));
    }
}

Чистые функции

Вспомогательные методы лучше всего реализовывать как чистые функции: результат зависит только от входных данных, без скрытого состояния. Благодаря этому они предсказуемы и удобны для проверки.

using System;

static class Geometry
{
    public static double RectArea(double w, double h) => w * h;
    public static double TriArea(double b, double h) => 0.5 * b * h;
}

class Program
{
    static void Main()
    {
        Console.WriteLine(Geometry.RectArea(4, 5));
        Console.WriteLine(Geometry.TriArea(6, 3));
    }
}

Композиция вспомогательных методов

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

using System;

static class TextUtils
{
    public static string Clean(string s) => s.Trim().ToLower();
    public static string Slug(string s) => Clean(s).Replace(" ", "-");
}

class Program
{
    static void Main()
    {
        Console.WriteLine(TextUtils.Slug("  Hello World  "));
    }
}

Статический класс и статические члены обычного класса

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

using System;

static class Convert2
{
    public static int FeetToInches(int feet) => feet * 12;
}

class Program
{
    static void Main()
    {
        Console.WriteLine(Convert2.FeetToInches(3) + " inches");
    }
}

Удобный поиск вспомогательных средств

Объединяйте вспомогательные средства в статические классы с понятными именами (DateUtils, StringUtils), чтобы другие разработчики могли легко их находить.

using System;

static class DateUtils
{
    public static bool IsWeekend(DayOfWeek d) =>
        d == DayOfWeek.Saturday || d == DayOfWeek.Sunday;
}

class Program
{
    static void Main()
    {
        Console.WriteLine(DateUtils.IsWeekend(DayOfWeek.Sunday));
        Console.WriteLine(DateUtils.IsWeekend(DayOfWeek.Monday));
    }
}

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

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

using System;

static class MoneyUtils
{
    public static string Format(decimal amount) => "$" + amount.ToString("0.00");
    public static decimal ApplyDiscount(decimal price, double pct) =>
        price * (decimal)(1 - pct / 100);
}

class Program
{
    static void Main()
    {
        decimal discounted = MoneyUtils.ApplyDiscount(80m, 25);
        Console.WriteLine(MoneyUtils.Format(discounted));
    }
}

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

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

Итоги

Статический класс (static class X) нельзя создать как экземпляр, и он может содержать только статические члены. Это стандартное место для функций и констант без состояния, объединённых под описательным именем. Встроенный класс Math — знакомый пример.

using System;

static class Util
{
    public static int Double(int n) => n * 2;
}

class Program
{
    static void Main()
    {
        Console.WriteLine(Util.Double(21));
    }
}

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

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

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

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

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

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

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

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

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

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

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

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

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