13

C# 中的静态构造函数上不允许使用public,之类的访问修饰符。private然而,Visual Studio 代码分析在 C# 安全类别中有一条警告,上面写着“ CA2121:静态构造函数应该是私有的”。

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

澄清:我不想让任何构造函数成为非私有的。所以为什么?” 问题无关紧要。我只是对两个微软工具之间的矛盾感到好奇,想看看是否有什么我不知道的关于静态构造函数是如何处理的。

4

3 回答 3

9

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

于 2012-07-02T11:19:05.417 回答
3

如果您阅读文档,它会清楚地说明

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

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

于 2012-07-02T11:10:14.590 回答
1

是否可以将静态构造函数设为非私有?

它的意义是什么?

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

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

于 2012-07-02T11:13:46.903 回答