繁体   English   中英

c#静态构造函数问题

[英]c# static constructor problem

以下代码不会调用类静态构造函数。 这是一个错误或功能吗?

class Test
{
    static Test
    {
       //do stuff
    }
    public static AnotherClass ClassInstance { get; set; }
}

class Program
{
    public static void Main()
    {
        var x = Test.ClassInstance;
    }
}

我现在没有编译器,但这就是我今天发生的事情。 永远不会调用静态构造函数,但是当ClassInstance是字段时调用它。

编辑:我知道在创建第一个实例或访问字段时会调用静态构造函数。 自动实施的属性背后是否有一个字段?

我正在寻找一些解释,当属性实现为两个函数和一个字段时,属性为什么不触发静态构造函数。 这对我来说非常不合逻辑,这就是为什么我认为这可能是一个错误。

静态构造函数在第一次创建类的实例或引用静态成员时调用。 因此,第一次创建Test实例或引用ClassInstance属性时,将调用静态构造函数。

你想知道更多吗? - http://msdn.microsoft.com/en-us/library/k9x6w0hc(VS.80).aspx

在访问任何静态成员或创建实例时,将调用静态构造函数

class Program
{
    static void Main(string[] args)
    {
        A.SomeField = new B();
    }
}

class A
{
    static A()
    {
        Console.WriteLine("Static A");
    }

    public static B SomeField { get; set; }
}

class B
{
    static B()
    {
        Console.WriteLine("Static B");
    }
}

结果:

Static B
Static A

如您所见 - 结果中没有“静态B”

我验证了相同的行为,但如果您更改这样的代码:

class AnotherClass {}

class Test
{
    static Test()
    {
        Console.WriteLine("Hello, world!");
    }

    public static AnotherClass ClassInstance { get { return new AnotherClass(); } }

}

class Program
{
    public static void Main()
    {
        var x = Test.ClassInstance;
    }
}

它写道:“你好,世界!”......

在创建第一个实例或引用任何静态成员之前,会自动调用静态构造函数。

来自Msdn的更多信息

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2025 STACKOOM.COM