問題タブ [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.
.net - 親クラスと子クラスの静的コンストラクターはどのような順序で呼び出されますか?
親クラスと子クラスの静的コンストラクターはどのような順序で呼び出されますか?
私は今それをテストすることができました...私が利用可能なコンパイラを持っていれば。
.net - .NET インターフェイスの静的コンストラクターが実行されない
IL の .NET のインターフェイスで静的コンストラクターを定義できます。ただし、そうすると、インターフェイスでメソッドを実行するときに静的コンストラクターが実行されません。
何が起きてる?CLR 仕様 (Partition II、10.5.3.1) によると、いつ型初期化子が実行されるかは Partition I で指定されていますが、Partition I で型初期化子の実行への参照が見つかりません。
編集:
インターフェイスの静的初期化子を実行することはできますが、静的フィールドをインターフェイスに追加し、コード内のどこかでそのフィールドにアクセスすることによってのみ、フィールドが静的コンストラクターで実際に割り当てられていなくてもかまいません。そのため、インターフェイスでメソッドを呼び出しても静的コンストラクターは実行されないようですが、フィールドにアクセスすると実行されます。これはなぜですか?そして、これは仕様のどこに記載されていますか?
c++ - C ++に静的コンストラクターがない理由は何ですか?
C ++に静的コンストラクターがない理由は何ですか?
許可されている場合は、次のように、非常に整理された方法で、その中のすべての静的メンバーを1か所で初期化します。
静的コンストラクターがない場合、上記のように静的ベクトルを作成し、それに値を設定することは非常に困難です。静的コンストラクターは、この問題をエレガントに解決します。非常に組織化された方法で静的メンバーを初期化できます。
では、なぜC++に静的コンストラクターがないのでしょうか。結局のところ、他の言語(たとえば、C#)には静的コンストラクターがあります!
c++ - C++ で静的コンストラクターを模倣する
これは、C++ でのオブジェクトの初期化に関する質問です。
共通の基本クラスから継承するクラス (インスタンスではない) のグループがあり、プログラムの開始時にコンテナー (具体的にはマップ) に自分自身に関する情報を登録する必要があります。
問題は、動的にする必要があることです。コンテナーは、クラスとは異なる独立したプロジェクトで定義されます。ライブラリを使用する各プログラムのクラスのセットごとに、ライブラリの複数のハードコーディングされたバージョンを作成することは避けたいと思います。
これらのサブクラスのそれぞれに特別なクラスの静的インスタンスを用意して、そのコンストラクターに登録することを考えました。ただし、これらのオブジェクトの構築前にコンテナが構築されることを保証する方法は見つかりませんでした。
サブクラスに関するコンテナ内の情報は、これらのサブクラスのインスタンスが作成される前に利用できる必要があることにも注意してください。
これを行う方法、または一般的に C++ で静的コンストラクターを模倣する方法はありますか?
c# - 静的コンストラクターでメタデータをオーバーライドしますか?
クラスを継承するTextBox
クラスがあり、それを呼び出しますMyTextBox
Background
このクラスのデフォルト値を再定義したいと思います。
そこで私はそうする方法を探し、良い選択肢を見つけました: callBackgroundProperty.OverrideMetadata()
問題は:これをどこに置くことができますか?
でApp.OnStartup()
?醜くて実用的ではないので、それをクラスのコード ファイルに含めたいと思います。
クラスのコンストラクターで?例外があります:
PropertyMetadata は、タイプ 'MyTextBox' に対して既に登録されています。
(私には問題ないように思えます。これを完全に取得する理由を理解しています)
そこで、C# の静的コンストラクターについてもう一度調べてみました (以前はそれについて何も知りませんでした。残念です)。
ここに私のコードがあります:
今、私はこれにかなり満足していますが、マイクロソフトはそうではありません. つまり、コード分析機能を使用すると、次のようになります。
CA1810:参照型の静的フィールドをインラインで初期化します
したがって、私の質問:それについて何ができますか?
- 警告を無視しますか?>> 警告を無視したくない
- overrideMetadata メソッドへの呼び出しを移動しますか? >> したいのですが、どこですか?
どんなヒントでも歓迎します、ありがとう
編集:静的コンストラクターで言うごとに何も初期化していないため、この警告が表示される理由を完全には理解していないことを追加しますか?
c# - C#静的コンストラクターで括弧が必要なのはなぜですか?
検討:
なぜが()
必要なのstatic Foo() {...}
ですか?静的コンストラクターは常にパラメーターなしである必要があるのに、なぜわざわざするのでしょうか。パーサーのあいまいさを回避するために必要ですか、それとも通常のパラメーターなしのコンストラクターとの一貫性を維持するためだけですか?
それはイニシャライザーブロックに非常によく似ているので、私はしばしばそれらを誤って除外していることに気付き、それから数秒間何が悪いのかを考えなければなりません。同じように排除できればいいのにと思います。
c# - .NET クラス ローダーが動作する標準的な方法はありますか?
.NET クラス ローダーが動作する標準的な方法はありますか?
このコードをコンパイルするとします。
コンパイルされたコードが (実装されているすべてのプラットフォームで) 次の出力を持つことを保証できますか?
c# - .Net:定数がアクセスされると、静的コンストラクターが呼び出されますか?
これが私が考えていることです...
これは機能しますか、それとも次のようなものを使用する必要がありますかstatic readonly
財産静的コンストラクターをトリガーするフィールド?
c# - c#静的コンストラクターが派生クラスから呼び出されない
Bussの静的フィールドへの参照がBusの静的コンストラクターをトリガーするように、これを機能させる方法はありますか?
c# - すべての静的コンストラクターがC#(つまり、親クラスのコンストラクター)で呼び出されないのはなぜですか?
、、の3つのクラスがBase
ありDerived
ますFinal
。Derived
から派生しBase
、からFinal
派生しDerived
ます。3つのクラスすべてに静的コンストラクターがあります。Derived
と呼ばれるパブリック静的メソッドとしてのクラスSetup
。を呼び出すとFinal.Setup
、3つの静的コンストラクターがすべて実行されると思いますが、実行されるのは1つだけDerived
です。
サンプルソースコードは次のとおりです。
これは私には部分的にしか意味がありません。Final.Setup()
呼び出しは実際にはのエイリアスにすぎないことを理解しているDerived.Setup()
ので、で静的コンストラクターをスキップすることはFinal
十分に公平に思えます。しかし、なぜ静的コンストラクターがBase
呼び出されないのですか?
これを修正するには、のno-operation静的メソッドを呼び出すBase
か、のダミー静的メソッドにアクセスしBase
ます。しかし、私は疑問に思っていました:この明らかに奇妙な行動の背後にある理由は何ですか?