ModuleInitializer
Метод должен быть static,
void и без параметров.
Нужен
using System.Runtime.CompilerServices.
Инициализатор срабатывает раньше
Main.
Синтаксис
[ModuleInitializer]
internal static void InitModule()
{
}
Пример
Давайте установить флаг в
инициализаторе и прочитать его
в Main:
using System;
using System.Runtime.CompilerServices;
class Program
{
static bool ready;
[ModuleInitializer]
internal static void InitModule()
{
ready = true;
}
static void Main()
{
bool res = ready;
Console.WriteLine(res);
}
}
Результат выполнения кода:
True
Пример
Давайте проверить, что метод
помечен ModuleInitializer:
using System;
using System.Reflection;
using System.Runtime.CompilerServices;
class Program
{
[ModuleInitializer]
internal static void InitModule()
{
}
static void Main()
{
MethodInfo method = typeof(Program).GetMethod(
"InitModule",
BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.Public);
bool res = method.IsDefined(typeof(ModuleInitializerAttribute), false);
Console.WriteLine(res);
}
}
Результат выполнения кода:
True
Пример
Давайте записать значение в статическое поле при загрузке:
using System;
using System.Runtime.CompilerServices;
class Program
{
static int token;
[ModuleInitializer]
internal static void InitModule()
{
token = 12345;
}
static void Main()
{
int res = token;
Console.WriteLine(res);
}
}
Результат выполнения кода:
12345
Смотрите также
-
Conditional,
условный вызов -
CollectionBuilder,
сборка коллекции -
Attribute,
базовый класс -
Атрибут,
обзор