静态代码的运行顺序

Wei*_* Ma 0 .net c# asp.net-mvc

我正在使用.Net mvc开展一个项目.我有一个包含静态构造函数和一些静态字段的csharp类.

    private static Class1 obj1 = new Class1();
    private static Class2 obj2 = new Class2();


    static Foo()
    {
       Init();
    }

   private static void Init()
   {
       obj1.DoSomething();
       obj2.DoSomething();
   }
Run Code Online (Sandbox Code Playgroud)

此类是我的DomainModel的一部分,并在我的Controller代码中引用.当我用VS2008运行项目时.在Controller代码使用obj1和obj2之前,似乎调用了Init().但是当我将代码部署到虚拟服务器时,似乎根本没有调用Init().有没有办法保证这些方法的执行顺序?

Jon*_*eet 6

假设你确实引用了这个类(不仅仅是派生类中的静态方法),那么C#规范保证静态变量被初始化,然后执行静态构造函数.同样,假设不涉及部分类,C#规范保证obj1将在之前初始化obj2.

如果在或构造函数中使用它们的值,则只能调用"see" obj1obj2之前Init()调用(因为这些构造函数将在初始化静态变量时被调用).Class1Class2

现在,如果没有看到其余代码,就很难用更具体的术语来讨论.如果您可以生成一个简短但完整的示例来说明问题,那么将更容易详细讨论.