web-dev-qa-db-ja.com

静的コンストラクターにパラメーターがないのはなぜですか?

MSDNによる:

静的コンストラクターはアクセス修飾子を受け取らないか、パラメーターを持ちません。

静的コンストラクターは、最初のインスタンスが作成される前、または静的メンバーが参照される前に、クラスを初期化するために自動的に呼び出されます。

静的コンストラクターを直接呼び出すことはできません。

静的コンストラクターがパラメーターを持つことができない理由を誰かが説明できますか?

21
Simsons

MSDNが言うように、最初のインスタンスが作成される前にクラスを初期化するために静的コンストラクターが自動的に呼び出されます。したがって、パラメータを送信することはできません。

CLRが静的コンストラクターを呼び出す必要がある場合、CLRはどのパラメーターを渡すかをどのように知るのでしょうか。

25
Motti

静的コンストラクターは、型の初期化の一部として自動的に呼び出されます。それらは明示的に呼び出されません...したがって、コンストラクターパラメーターに対応する引数を提供できる場所はありません。引数に値を指定できないのに、なぜallowパラメータにしたいのですか?

8
Jon Skeet

クラスが初めて参照されるときにランタイムによって自動的に呼び出され、直接呼び出すことができない場合、そのようなコンストラクターに渡される引数をどのように制御しますか?

理論的には、このような構文を考案して実装することもできますが、単純なクラス参照では引数として何を渡すかがわからないため、直接呼び出す必要があります。静的コンストラクターの要点は、型を使用する前に型レベルの初期化を実行することです。そうすることで自動的にこれが当てはまりますが、直接呼び出すと間違いの余地が十分にあります。

8
dlev

直接呼び出すことはできないため(MSDNによる):

静的コンストラクターを直接呼び出すことはできません。

4
Ritch Melton

静的コンストラクターはパラメーターを持つことができませんでした。理論的にはcouldだと思いますが、クラスのインスタンスがないため、意味がありません。それらがある場合、それらのパラメーターをどのように処理しますか?他の静的メソッドを呼び出しますか?

2
brendan
  • 静的コンストラクターは、クラスの最初のインスタンスが作成される前に自動的に呼び出されます。
  • コンストラクター定義の前に静的キーワードを付けることによって宣言されます。
  • アクセス修飾子を取得したり、パラメーターを設定したりすることはできません。
0
wpzone4u

静的コンストラクター

静的コンストラクターは自動的に呼び出されるため(静的コンストラクターの呼び出しを制御することはできません)、静的コンストラクターにパラメーターを渡すことができないのはそのためです。

また、静的コンストラクターにパラメーターを渡すことができない場合は、パラメーター化された静的コンストラクターを作成する理由を説明します。

したがって、パラメーターの少ない静的コンストラクターが必要です。

0
Sonu Rajpoot

静的クラスに空のコンストラクターを作成し、パラメーター化されたコードを通常の関数に配置します。この関数を呼び出すと、静的クラスが作成されます。

静的クラス:

static class DataB
{
    static DataB(){}

    public static void funcWithParams(string st)
    {...}
}

次のように作成できます。

DataB.funcWithParams("some string");
0
user3567816