C#中的静态构造函数不允许使用public
,private
等访问修饰符。然而,Visual Studio代码分析在C#安全类别中有一个警告,表示" CA2121: Static constructors should be private"。
是否可以使静态构造函数非私有?或者这是Visual Studio代码分析的错误吗?
澄清:我没有尝试将任何构造函数设为非私有。那么"为什么?"问题无关紧要。我只是对两个Microsoft工具之间的矛盾感到好奇,并希望了解是否有任何我不了解静态构造函数的处理方式。
答案 0 :(得分:9)
C#静态构造函数始终是私有的。您永远不应该看到C#代码的警告,并且警告在那里没用。但是,代码分析也可用于其他语言,并且可能会导致您使用非私有静态构造函数编写类的其他语言。
答案 1 :(得分:3)
如果您阅读文档,则明确说明
如果静态构造函数不是私有的,则可以通过系统以外的代码调用它。根据构造函数中执行的操作,这可能会导致意外行为。
我想更重要的问题是你为什么要?
答案 2 :(得分:1)
是否可以使静态构造函数不是私有的?
它有什么意义?
在执行任何方法之前,从链接器加载类的那一刻调用静态构造函数。因此,静态构造函数不能在链接器的自动调用之外被调用,这意味着它没有任何意义,它具有任何访问修饰符。
基本上你不能引用没有静态修改器执行的类 - 并且在包含引用的代码执行之前执行。