Menu
Coddy logo textTech

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

Часть раздела Объектно-ориентированное программирование путешествия по C# на Coddy — урок 13 из 70.

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

public static class MathHelper
{
    public static double Pi = 3.14159;
    
    public static int Square(int number)
    {
        return number * number;
    }
    
    public static int Add(int a, int b)
    {
        return a + b;
    }
}

Вы используете статические классы так же, как и статические члены, вызывая их напрямую через имя класса:

int result = MathHelper.Square(5);
double pi = MathHelper.Pi;

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

Классы Console и Math, которые вы использовали, являются отличными примерами статических классов. Они предоставляют вспомогательную функциональность без необходимости в состоянии объекта. Статические классы идеально подходят для группировки связанных вспомогательных методов или констант, которые не требуют данных, специфичных для конкретного экземпляра.

challenge icon

Задание

Легко

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

Вы создадите два файла для организации вашего кода:

  • TemperatureConverter.cs: Определите статический класс с именем TemperatureConverter в пространстве имен Utilities. Этот класс должен содержать:
    • Статическое поле AbsoluteZeroCelsius, установленное в значение -273.15
    • Статический метод CelsiusToFahrenheit(double celsius), который преобразует Цельсии в Фаренгейты по формуле: (celsius * 9 / 5) + 32
    • Статический метод FahrenheitToCelsius(double fahrenheit), который преобразует Фаренгейты в Цельсии по формуле: (fahrenheit - 32) * 5 / 9
    • Статический метод IsAboveAbsoluteZero(double celsius), который возвращает true, если температура выше абсолютного нуля
  • Program.cs: В основном файле используйте статический класс для выполнения преобразований. Считайте значение температуры в градусах Цельсия из входных данных, затем выведите результаты преобразований и проверки.

Вы получите одно входное значение: температуру в градусах Цельсия.

Выведите результаты в следующем формате:

{celsius}C = {fahrenheit}F
{fahrenheit}F = {convertedBack}C
Above Absolute Zero: {True/False}
Absolute Zero: {AbsoluteZeroCelsius}C

Например, если на вход подано 25, вывод должен быть следующим:

25C = 77F
77F = 25C
Above Absolute Zero: True
Absolute Zero: -273.15C

Помните, что экземпляры статических классов нельзя создавать — вы будете вызывать все методы непосредственно через имя класса, например TemperatureConverter.CelsiusToFahrenheit(25).

Шпаргалка

Класс static может содержать только статические члены и не может быть инстанцирован. Он используется для группировки связанных вспомогательных методов и констант, которым не требуется состояние объекта.

public static class MathHelper
{
    public static double Pi = 3.14159;
    
    public static int Square(int number)
    {
        return number * number;
    }
    
    public static int Add(int a, int b)
    {
        return a + b;
    }
}

Доступ к статическим членам класса осуществляется напрямую через имя класса:

int result = MathHelper.Square(5);
double pi = MathHelper.Pi;

Ограничения статических классов:

  • Не могут быть инстанцированы с помощью new
  • Не могут иметь конструкторы экземпляра
  • Не могут наследоваться
  • Могут содержать только статические поля, свойства и методы

Общие примеры включают классы Console и Math, которые предоставляют вспомогательную функциональность без необходимости в состоянии объекта.

Попробуйте сами

using System;
using Utilities;

class Program
{
    public static void Main(string[] args)
    {
        // Считать температуру в градусах Цельсия
        double celsius = Convert.ToDouble(Console.ReadLine());
        
        // TODO: Используйте статические методы TemperatureConverter, чтобы:
        // 1. Преобразовать градусы Цельсия в градусы Фаренгейта
        // 2. Преобразовать градусы Фаренгейта обратно в градусы Цельсия
        // 3. Проверить, выше ли температура абсолютного нуля
        // 4. Получить константу абсолютного нуля
        
        // TODO: Вывести результаты в требуемом формате:
        // {celsius}C = {fahrenheit}F
        // {fahrenheit}F = {convertedBack}C
        // Above Absolute Zero: {True/False}
        // Absolute Zero: {AbsoluteZeroCelsius}C
        
    }
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Объектно-ориентированное программирование