問題タブ [static-constructor]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 静的初期化子で返す
これは有効なコードではありません:
これはばかげた例ですが、静的クラス コンストラクターではできませんreturn;
。なんで?これには正当な理由がありますか?誰かがこれについてもっと知っていますか?
ですから、私がすべき理由は、そこでreturn
構築を終了することです。
ありがとう
c# - ネストされたクラスでメソッドを呼び出すときに、親クラスの静的コンストラクターが呼び出されないのはなぜですか?
次のコードの場合、"Main" の最初の行の後に "Outer" の静的コンストラクターが呼び出されないのはなぜですか?
c# - 静的コンストラクターを実行するにはどうすればよいですか?
インスタンスを作成せずに、クラスの静的コンストラクターを実行したい(つまり、クラスを「ロード」したい)。それ、どうやったら出来るの?
ボーナス質問:.NET 4と以前のバージョンの間に違いはありますか?
編集:
- クラスは静的ではありません。
- 実行に時間がかかるため、インスタンスを作成する前に実行したいと思います。最初のアクセスでこの遅延を回避したいと思います。
- 静的コンストラクター
private static readonly
はフィールドを初期化するため、代わりにメソッドで実行することはできません。
c# - RunClassConstructorは、型の静的コンストラクターを1回だけ実行することが保証されていますか?
このコードを使用して、クラスの静的コンストラクターを呼び出しています。
これにより、cctorが2回実行される可能性がありますか?
c# - 静的読み取り専用フィールド初期化子と静的コンストラクターの初期化
以下は、静的読み取り専用フィールドを初期化する 2 つの異なる方法です。2つのアプローチに違いはありますか?はいの場合、いつ一方を他方よりも優先する必要がありますか?
c# - クラスへの静的パラメーターの受け渡し
私の知る限り、C# の静的コンストラクターにパラメーターを渡すことはできません。ただし、クラスのインスタンスを作成する前に、2 つのパラメーターを渡して静的フィールドに割り当てる必要があります。どうすればいいですか?
c# - 静的コンストラクターは、非静的コンストラクターの後に実行できます。これはコンパイラのバグですか?
次のプログラムからの出力は次のとおりです。
これはコンパイラのバグですか?私は期待しました:
静的コンストラクターは常に非静的コンストラクターの前に呼び出されると思ったからです。
.net3.5と.net4.0の両方を使用してVisualStudio2010でこれをテストしました。
gcc - フリースタンディング ARM C++ コード - 空の .ctors セクション
フリースタンディング環境 (基本的には ARM ボード) で実行する C++ コードを書いています。つまずきのブロック、つまりグローバル静的コンストラクターに遭遇したことを除いて、それはうまくいっています。
私の理解では、.ctors セクションには各静的コンストラクターへのアドレスのリストが含まれており、私のコードでは、このリストを反復処理して、各関数を呼び出します。しかし、バイナリのこのセクションは実際には完全に空であることがわかりました! Google は、「.ctors」(EABI のもの) の代わりに「.init_array」を使用することを指摘しましたが、何も変わっていません。
静的コンストラクターが存在しない理由についてのアイデアはありますか? 関連するリンカー スクリプトと objdump の出力は次のとおりです。
--
arm-elf を対象とした GCC コンパイラ (4.4.1) を使用しています。
更新: 出力バイナリも__static_initialization_and_destruction_0
、これまでに見たことのないシンボルでいっぱいです。
更新 2: これは、コンパイルされたオブジェクト ファイル (メイン バイナリにリンクされている) の objdump からの抜粋で、.ctors セクションはそのままです。
c# - パブリックコンストラクターと静的コンストラクター
2つのコンストラクターを使用するC#のコードを読んでいます。1つは静的で、もう1つはパブリックです。これら2つのコンストラクターの違いは何ですか?そして、静的コンストラクターを使用する必要があるのは何ですか?
c# - CLR が常に値型コンストラクターを呼び出さないのはなぜですか
Value type 内の型コンストラクターに関する質問があります。この質問は、Jeffrey Richter が C# 3rd ed を介して CLR で書いたものに触発されたもので、CLR が呼び出さない場合があるため、実際には値型内で型コンストラクターを定義するべきではないと彼は言います (195 ページ - 第 8 章)。それ。
したがって、たとえば (実際には...Jeffrey Richters の例)、IL を見ても、型コンストラクターが次のコードで呼び出されていない理由を理解できません。
したがって、型コンストラクターに次の規則を適用すると、上記の値型コンストラクターがまったく呼び出されない理由がわかりません。
- 静的値型コンストラクターを定義して、型の初期状態を設定できます。
- 型には複数のコンストラクターを含めることはできません。デフォルトのコンストラクターはありません。
- 型コンストラクターは暗黙的にプライベートです
- JIT コンパイラは、型の型コンストラクターがこの AppDomain で既に実行されているかどうかを確認します。そうでない場合は、呼び出しをネイティブ コードに発行します。
だから...この型配列が構築されているのが見えない理由がわかりません。
私の最善の推測は、次のようになる可能性があるということです。
- CLR が型配列を構築する方法。最初のアイテムが作成されたときに静的コンストラクターが呼び出されると思っていたでしょう
- コンストラクターのコードは静的フィールドを初期化していないため、無視されます。コンストラクター内でプライベート静的フィールドを初期化して実験しましたが、フィールドはデフォルトの 0 値のままです。したがって、コンストラクターは呼び出されません。
- または...パブリックInt32が設定されているため、コンパイラーは何らかの方法でコンストラクター呼び出しを最適化しています-しかし、それはせいぜいあいまいな推測です!!
ベストプラクティスなどは別として、なぜ呼び出されないのかを自分で確認したいので、非常に興味をそそられます。
編集:私は以下の私自身の質問に答えを追加しました.Jeffrey Richterがそれについて言っていることの引用です.
誰かがアイデアを持っていれば、それは素晴らしいことです。どうもありがとう、ジェームズ