I have the following piece of codes.
class Program
{
static void Main(string[] args)
{
Enterprise.Initialize("Awesome Company");
// Assertion failed when constructor of 'Reg' class is disabled.
Debug.Assert(Reg.Root == @"Software\Awesome Company");
}
}
public static class Enterprise
{
// Static Properties.
public static string Company
{
get;
private set;
}
// Static Methods.
public static void Initialize(string company)
{
Company = company;
}
}
public class Reg
{
public static string Root = $@"Software\{Enterprise.Company}";
// ctor.
static Reg()
{
// Assertion failed when this constructor is disabled.
}
}
When executed, the assertion passed. However, the assertion failed when the constructor for Reg
class is disabled. On a closer look, I've found that the implicit constructor of Reg
class is called before Main()
. If the constructor of Reg
class is explicitly defined, it will be called after Main()
.
Why such discrepancy between implicit and explicit constructor?