[英]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;
}
}
它写道:“你好,世界!”......
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.