我已经解决/解决了我遇到的技术问题,但我仍然很好奇为什么Silverlight在静态成员变量方面的行为与标准.NET应用程序不同。
这是细分 -
我有一个包含以下类定义的类文件:
public class Foo
{
public static readonly List<int> AwesomeNumbers = new List<int>() { 1,2,3,4,5,6,7 };
}
如果我将该类插入一个简单的控制台应用程序,它的行为与我引用 Foo.AwesomeNumbers 时的预期完全相同(JIT编译器发现 AwesomeNumbers 不是在堆中,因此它使用提供的值创建对象实例)并且可立即使用。
如果我将该类插入Silverlight应用程序(在我的情况下为OOB),当引用 Foo.AwesomeNumbers 时, AwesomeNumbers 为空(即使我做了这种情况也会发生Foo静态类)。但是,如果我在App.xaml.cs启动方法中实例化 Foo 的一次性实例,则会创建静态成员,并从那时开始对 Foo.AwesomeNumbers 的任何引用按预期工作。就好像你必须通过至少构造一次类来强制静态成员的实例化。
有没有合理的解释为什么Silverlight会这样处理它们?这是为了保持插件修剪而落到了路边还是仅仅是一个错误?