Класс можно объявлять как static
. Статический класс обладает двумя основными свойствами. Во-первых, объекты статического класса создавать нельзя. И во-вторых, статический класс должен содержать только статические члены. Статический класс создается по приведенной ниже форме объявления класса, видоизмененной с помощью ключевого слова static
static class имя_класса { // ...
В таком классе все члены должны быть объявлены как static
. Ведь если класс становится статическим, то это совсем не означает, что статическими становятся и все его
члены.
Статические классы применяются главным образом в для хранения совокупности связанных друг с другом статических методов. Именно это его применение и рассматривается ниже.
В приведенном ниже примере программы класс 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
. И последнее замечание: несмотря на то, что для статического класса не допускается наличие конструктора экземпляра, у него может быть статический конструктор.
Статические конструкторы | Проверка знаний: классы, объекты и методы |