构造函数上的static修饰符意味着什么?

the*_*row 5 c#

我在工作中看到了这种代码:

class FooPlugin : IPlugin // IPlugin is a Microsoft CRM component, it has something special about it's execution
{
  static FooPlugin()
  {
     SomeObject.StaticFunction(); // The guy who wrote it said it's meaningful to this question but he can't remember why.
  }
}
Run Code Online (Sandbox Code Playgroud)

知道构造函数上的静态修饰符是什么意思,为什么在这种情况下它是必需的?

bri*_*ner 6

这是类的静态初始化.

当您使用方法,字段,属性或类的任何其他内容时,它将被调用.换句话说,它将在您第一次使用该类时调用.

请参阅MSDN上的静态构造函数

您还可以在此处初始化静态内容.

在你的例子中,似乎任何写过的SomeObject.StaticFunction()人都希望在人们使用之前调用一次FooPlugin,可能所以在使用之前它会被初始化FooPlugin.

请注意,使用它时会有一些性能损失,而visual studio(使用代码分析)可以让您知道最好内联初始化静态字段.

请参阅CA1810:在MSDN上初始化内联的引用类型静态字段

  • @the_drow:从头脑中获取C++,你的生活将立即变得更好.静态构造函数是第一次尝试使用该类时调用一次的方法.这里有什么不清楚的? (2认同)