Looking for c# Keywords? Try Ask4Keywords

C# Language Исключения в статических конструкторах


пример

Если статический конструктор генерирует исключение, он никогда не будет повторен. Тип непригоден для жизни AppDomain. Любые дополнительные применения этого типа будут вызывать TypeInitializationException обернутое вокруг исходного исключения.

public class Animal
{
    static Animal()
    {
        Console.WriteLine("Static ctor");
        throw new Exception();
    }

    public static void Yawn() {}
}

try
{
    Animal.Yawn();
}
catch (Exception e)
{
    Console.WriteLine(e.ToString());
}

try
{
    Animal.Yawn();
}
catch (Exception e)
{
    Console.WriteLine(e.ToString());
}

Это приведет к выводу:

Статический калькулятор

System.TypeInitializationException: инициализатор типа для «Animal» сделал исключение. ---> System.Exception: выбрано исключение типа «System.Exception».

[...]

System.TypeInitializationException: инициализатор типа для «Animal» сделал исключение. ---> System.Exception: выбрано исключение типа «System.Exception».

где вы можете видеть, что фактический конструктор выполняется только один раз, и исключение повторно используется.