【发布时间】:2016-01-10 17:19:47
【问题描述】:
我一直在抓挠和敲打这个。我怀疑我在这里只是愚蠢,但我似乎无法初始化一个 const 或静态成员,因此我可以在整个课程中使用它。
这是一个说明我的问题(或者更确切地说是我的误解)的例子:
using System;
namespace ConstExample
{
public class HasImmutableMember
{
// static private double fSectionLengthTolerancePerInch = 1 / (20 * 12); // tolerance is 1" per every 20'
private const double fSectionLengthTolerancePerInch = 1 / (20 * 12); // tolerance is 1" per every 20'
static HasImmutableMember()
{
Console.WriteLine("static c'tor: " + fSectionLengthTolerancePerInch);
}
public HasImmutableMember()
{
Console.WriteLine("instance c'tor: " + fSectionLengthTolerancePerInch);
}
}
public class Program
{
public void Main(string[] args)
{
HasImmutableMember instance = new HasImmutableMember();
}
}
}
控制台输出是:
static c'tor: 0
instance c'tor: 0
无法在 const 成员声明处设置断点,但如果我使用静态版本,我可以。两者都没有给我想要的东西。静态成员声明确实在静态 c'tor 或实例 c'tor 之前被命中。正如预期的那样,静态 c'tor 在实例 c'tor 之前被击中。但是在静态和实例 c'tor 中,我的成员的值都是 0 而不是初始化值。
我错过了什么?
【问题讨论】:
-
好的,这是我的问题。典型的。我应该知道得更多。
标签: c# static initialization constants static-initialization