Статический конструктор
Статический конструктор объявляют как static
блок без параметров и модификаторов доступа. CLR
вызывает его не более одного раза на тип в домене
приложения - обычно перед созданием первого
экземпляра или чтением статического поля. Порядок
вызова согласован с инициализацией статических
полей этого типа.
Синтаксис
class Имя
{
static Имя()
{
// инициализация типа
}
}
Пример
Давайте зададим статическое поле в статическом конструкторе:
using System;
class AppId
{
public static string Value;
static AppId()
{
Value = "abcde";
}
}
class Program
{
static void Main()
{
Console.WriteLine(AppId.Value);
}
}
Результат выполнения кода:
"abcde"
Пример
Давайте увеличим счётчик при каждом создании экземпляра после однократной инициализации типа:
using System;
class Serial
{
private static int _next;
public int Id;
static Serial()
{
_next = 1;
}
public Serial()
{
Id = _next++;
}
}
class Program
{
static void Main()
{
var first = new Serial();
var second = new Serial();
Console.WriteLine($"{first.Id} {second.Id}");
}
}
Результат выполнения кода:
1 2
Пример
Давайте прочитаем статическое поле до создания объекта - статический конструктор уже отработает:
using System;
class Table
{
public static int Size;
static Table()
{
Size = 5;
}
}
class Program
{
static void Main()
{
Console.WriteLine(Table.Size);
}
}
Результат выполнения кода:
5
Смотрите также
-
конструктор экземпляра,
который вызывается при каждом new -
модификатор
static,
который отмечает члены, принадлежащие типу -
статический класс,
где все члены статические по определению -
оператор
new,
после которого может выполниться статический конструктор