Статические классы
Часть раздела Объектно-ориентированное программирование путешествия по 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, которые вы использовали, являются отличными примерами статических классов. Они предоставляют вспомогательную функциональность без необходимости в состоянии объекта. Статические классы идеально подходят для группировки связанных вспомогательных методов или констант, которые не требуют данных, специфичных для конкретного экземпляра.
Задание
ЛегкоДавайте создадим утилиту для конвертации температуры, используя статический класс для группировки связанных вспомогательных методов, которые не требуют состояния объекта.
Вы создадите два файла для организации вашего кода:
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
}
}
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Объектно-ориентированное программирование
1Основы ООП
Внешние файлыПространства имен и директивыВведение в классы и объектыКлючевое слово 'this'Методы и параметрыПоля и свойстваКонструкторыИнициализаторы объектовИтоги — Простой калькулятор4Наследование
Основы синтаксиса наследования (:)Ключевое слово 'base'Ключевые слова Virtual и OverrideЗапечатанные классыБазовый класс 'object'Итоги — Иерархия сотрудников7Продвинутые возможности
Перегрузка операторовИндексаторы (this[])Переопределение ToString()Методы расширенияПовторение — Пользовательский список10Паттерны проектирования. Часть 1
Введение в паттерны проектированияПотокобезопасный SingletonПаттерн FactoryПаттерн Observer (События)Паттерн Strategy13Финальные испытания
Платформа для онлайн-обученияКомпонент игрового персонажаСервис аренды транспорта2Свойства и статические члены
Автоматически реализуемые свойстваСвойства только для чтения и записиСтатические поля и методыСтатические классыЧлены в виде выражений5Полиморфизм и интерфейсы
Полиморфизм: компиляция vs выполнениеИнтерфейс vs абстрактный классМножественные интерфейсыЯвные интерфейсыUpcasting и DowncastingИтоги: Калькулятор фигур8Продвинутые концепции ООП
Композиция вместо наследованияGenerics (классы и методы)Делегаты и событияАтрибуты и рефлексияIDisposable и оператор usingОсновы Dependency Injection11Паттерны проектирования. Часть 2
Паттерн КомандаПаттерн АдаптерПаттерн ДекораторПаттерн Шаблонный методПаттерн СостояниеПаттерн Компоновщик3Архитектура классов
Экземплярные и статические данныеКлючевые слова 'readonly' и 'const'Опорные поляПовторение — Менеджер банковских счетов6Инкапсуляция
Модификаторы доступаСвойства для инкапсуляцииРеализация скрытия данныхПаттерны неизменяемостиИтоги — Записи студентов9Переменное количество аргументов
Ключевое слово 'params'Необязательные параметрыИменованные аргументыПерегрузка методов