13

Access modifiers like public, private are not allowed on static constructors in C#. Yet, Visual Studio code analysis has a warning in C# security category that says "CA2121: Static constructors should be private".

Is it possible to make a static constructor non-private? Or is that an error of Visual Studio code analysis?

CLARIFICATION: I'm not trying to make any constructor non-private. So "why?" questions are irrelevant. I'm just curious about the contradiction between two Microsoft tools and want to see if there is anything I don't know about how static constructors are handled.

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 に答える