Книга: C# 4.0: полное руководство
Статические классы
Статические классы
Класс можно объявлять как static
. Статический класс обладает двумя основными свойствами. Во-первых, объекты статического класса создавать нельзя. И во-вторых, статический класс должен содержать только статические члены. Статический класс создается по приведенной ниже форме объявления класса, видоизмененной с помощью ключевого слова static.
static class имя_класса { // ...
В таком классе все члены должны быть объявлены как static
. Ведь если класс становится статическим, то это совсем не означает, что статическими становятся и все его члены.
Статические классы применяются главным образом в двух случаях. Во-первых, статический класс требуется при создании метода расширения. Методы расширения связаны в основном с языком LINQ и поэтому подробнее рассматриваются в главе 19. И во-вторых, статический класс служит для хранения совокупности связанных друг с другом статических методов. Именно это его применение и рассматривается ниже.
В приведенном ниже примере программы класс NumericFn
типа static
служит для хранения ряда статических методов, оперирующих числовым значением. А поскольку все члены класса NumericFn
объявлены как static
, то этот класс также объявлен как static
, чтобы исключить получение экземпляров его объектов. Таким образом, класс NumericFn
выполняет организационную роль, предоставляя удобные средства для группирования логически связанных методов.
// Продемонстрировать применение статического класса.
using System;
static class NumericFn {
// Возвратить обратное числовое значение.
static public double Reciprocal(double num) {
return 1/num;
}
// Возвратить дробную часть числового значения.
static public double FracPart(double num) {
return num - (int) num;
}
// Возвратить логическое значение true, если числовое
// значение переменной num окажется четным.
static public bool IsEven(double num) {
return (num % 2) == 0 ? true : false;
}
// Возвратить логическое значение true, если числовое
// значение переменной num окажется нечетным,
static public bool IsOdd(double num) {
return !IsEven(num);
}
}
class StaticClassDemo {
static void Main() {
Console.WriteLine("Обратная величина числа 5 равна " +
NumericFn.Reciprocal(5.0) ) ;
Console.WriteLine("Дробная часть числа 4.234 равна " +
NumericFn.FracPart(4.234));
if(NumericFn.IsEven(10))
Console.WriteLine("10 — четное число.");
if(NumericFn.IsOdd(5))
Console.WriteLine("5 — нечетное число.");
// Далее следует попытка создать экземпляр объекта класса NumericFn,
// что может стать причиной появления ошибки.
// NumericFn ob = new NumericFn(); // Ошибка!
}
}
Вот к какому результату приводит выполнение этой программы.
Обратная величина числа 5 равна 0.2
Дробная часть числа 4.234 равна 0.234
10 — четное число.
5 — нечетное число.
Обратите внимание на то, что последняя строка приведенной выше программы закомментирована. Класс NumericFn
является статическим, и поэтому любая попытка создать объект этого класса может привести к ошибке во время компиляции. Ошибкой будет также считаться попытка сделать нестатическим член класса NumericFn
.
И последнее замечание: несмотря на то, что для статического класса не допускается наличие конструктора экземпляра, у него может быть статический конструктор.
- Управление доступом к членам класса
- Передача объектов методам по ссылке
- Использование модификаторов параметров ref и out
- Использование переменного числа аргументов
- Возврат объектов из методов
- Перегрузка методов
- Перегрузка конструкторов
- Инициализаторы объектов
- Необязательные аргументы
- Именованные аргументы
- Метод Main()
- Рекурсия
- Применение ключевого слова static
- Статические классы
- 7.15. Статические методы
- Классы сертификатов
- Статические члены
- 7.16. Абстрактные классы
- Резюме: Классы памяти
- ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ НА JAVA 7. КЛАССЫ
- Функции, функторы и классы функций
- Лекция 7. Статические структуры: классы
- Глава 3. Классы P и NP
- 9.1. Классы и прототипы
- 9.8. Классы в ECMAScript 5
- 9.7.4. Иерархии классов и абстрактные классы