У статических конструкторов отсутствуют модификаторы доступа — они пользуются доступом по умолчанию, а следовательно, их нельзя вызывать из программы.
using System;
class Cons
{
public static int alpha;
public int beta;
// Статический конструктор.
static Cons()
{
alpha = 99;
Console.WriteLine("В статическом конструкторе.");
}
// Конструктор экземпляра.
public Cons()
{
beta = 100;
Console.WriteLine("В конструкторе экземпляра.");
}
}
class ConsDemo
{
static void Main()
{
Cons ob = new Cons();
Console.WriteLine("Cons.alpha: " + Cons.alpha);
Console.WriteLine("ob.beta: " + ob.beta);
}
}
Статические классы
Статический класс обладает двумя основными свойствами. Во-первых, объекты статического класса создавать нельзя. И во-вторых, статический класс должен содержать только статические члены.
static class имя_класса{ //...
Статические классы применяются главным образом в двух случаях. Во-первых, статический класс требуется при создании метода расширения. Методы расширения связаны в основном с языком LINQ и поэтому подробнее рассматриваются в главе 19. И во-вторых, статический класс служит для хранения совокупности связанных друг с другом статических методов.
|
|
//продемонстрировать применение статического класса.
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(); // Ошибка!
}
}
И последнее замечание: несмотря на то, что для статического класса не допускается наличие конструктора экземпляра, у него может быть статический конструктор.
ГЛАВА
Перегрузка операторов