静态构造函数如何成为非私有的?

时间:2012-07-02 11:05:59

标签: c# static-constructor

C#中的静态构造函数不允许使用publicprivate等访问修饰符。然而,Visual Studio代码分析在C#安全类别中有一个警告,表示" CA2121: Static constructors should be private"。

是否可以使静态构造函数非私有?或者这是Visual Studio代码分析的错误吗?

澄清:我没有尝试将任何构造函数设为非私有。那么"为什么?"问题无关紧要。我只是对两个Microsoft工具之间的矛盾感到好奇,并希望了解是否有任何我不了解静态构造函数的处理方式。

3 个答案:

答案 0 :(得分:9)

C#静态构造函数始终是私有的。您永远不应该看到C#代码的警告,并且警告在那里没用。但是,代码分析也可用于其他语言,并且可能会导致您使用非私有静态构造函数编写类的其他语言。

答案 1 :(得分:3)

如果您阅读文档,则明确说明

  

如果静态构造函数不是私有的,则可以通过系统以外的代码调用它。根据构造函数中执行的操作,这可能会导致意外行为。

我想更重要的问题是你为什么要

答案 2 :(得分:1)

  

是否可以使静态构造函数不是私有的?

它有什么意义?

在执行任何方法之前,从链接器加载类的那一刻调用静态构造函数。因此,静态构造函数不能在链接器的自动调用之外被调用,这意味着它没有任何意义,它具有任何访问修饰符。

基本上你不能引用没有静态修改器执行的类 - 并且在包含引用的代码执行之前执行。