相关疑难解决方法(0)

静态构造函数可以在非静态构造函数之后运行.这是编译器错误吗?

以下程序的输出是:

Non-Static
Static
Non-Static
Run Code Online (Sandbox Code Playgroud)

这是编译器错误吗?我期望:

Static
Non-Static
Non-Static
Run Code Online (Sandbox Code Playgroud)

因为我认为静态构造函数总是在非静态构造函数之前被调用.

我使用.net 3.5和.net 4.0对Visual Studio 2010进行了测试.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace StaticConstructorBug
{
    class Program
    {
        static void Main(string[] args)
        {
            var mc = new MyClass();

            Console.ReadKey();
        }
    }

    public class MyClass
    {
        public MyClass()
        {
            Console.WriteLine("Non-static");
        }

        static MyClass()
        {
            Console.WriteLine("Static");
        }

        public static MyClass aVar = new MyClass();
    }
}
Run Code Online (Sandbox Code Playgroud)

c# static-constructor

11
推荐指数
2
解决办法
4027
查看次数

调用静态构造函数和实例构造函数

据我所知,父类的构造函数先调用然后调用子类.但是为什么在静态构造函数的情况下它首先从派生类执行,然后是子类?

namespace ConsoleApplication1

    {

 class Program

    {

        static void Main(string[] args)
        {
            Child t = new Child();
        }
    }

    class Parent
    {
        public  Parent()
        {
            Console.WriteLine("Parent Instance Constructor");
            Console.ReadKey();
        }

        static Parent()
        {
            Console.WriteLine("Parent Static Constructor");
            Console.ReadKey();
        }
    }
    class Child : Parent
    {
        public Child()
        {
            Console.WriteLine("Child Instance Constructor");
            Console.ReadKey();
        }

        static Child()
        {
            Console.WriteLine("Child Static Constructor");
            Console.ReadKey();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

子静态构造函数

父静态构造函数

父实例构造函数

子实例构造函数

现在按照Jeppe Stig Nielsen建议,当我在构造函数中初始化静态字段时,它按以下顺序运行

产量

父静态构造函数

子静态构造函数

父实例构造函数

子实例构造函数

class XyzParent
{ …
Run Code Online (Sandbox Code Playgroud)

c#

6
推荐指数
2
解决办法
7596
查看次数

标签 统计

c# ×2

static-constructor ×1