問題タブ [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.
c# - アセンブリ内のメソッドを呼び出す前にCLRが呼び出す最も早いエントリポイントは何ですか?
過去数年間、私は時折DLL_PROCESS_ATTACH
、.NETの世界で(不)有名なものに相当するものが利用できるのか疑問に思っていました。クラスへの最初のエントリポイントは静的コンストラクター(cctor)であると私が言っているドキュメントはどれも、それがいつ呼び出されるかに影響を与えることはできません。また、他のcctorよりも先に呼び出されることが保証されている1つのcctorを定義することもできません。またはフィールド初期化子、ハック、クラスが使用されない場合はまったく呼び出されない可能性があります。
したがって、アセンブリのメソッドが呼び出される前に何かが初期化されることを保証し、アセンブリ内のすべてのクラスにcctorを追加する必要がない場合、どのようなアプローチを取ることができますか?それとも、私がここ数年見逃していた.NETの簡単で管理されたソリューションはありますか?
c# - 静的辞書を実装する方法C#で実行時にパラメーターを使用しますか?
次のコードがあります。
ただし、辞書に整数を追加する必要があると判断したDictionary<ScraperMasterUriDetails>
ため、プロパティといくつかのパラメーターをコンストラクターに追加すると考えました。
しかし、C# ではそれができません。実装しようとしているものを実装するにはどうすればよいですか?
編集:
経験豊富なメンバーが私の投稿を編集したので、そのままにしておきます。辞書を使うことは気にしない(当時はちょうどいい使い方だった)
基本的に、構造的に 3 種類のデータのリストが必要なだけですが、値を格納するクラスのインスタンスを常に 1 回参照する必要があるため、静的です。今、私は常に List of(T) を次のように行ってきました。
そして、次のことを行いました
ただし、このシナリオでは、上記と同様のものが必要ですが、静的です (インスタンスを作成したくないなど)。すべての提案に本当に感謝しているため、投稿を編集して詳細情報を提供しました。
注として、LINQ を使用していくつかのレコードを抽出することをお勧めします。たとえば、get record where guid == guid などです。使用するのはこれだけです。
c# - C#静的ガベージコレクター?
静的コンストラクターとインスタンス コンストラクターを持つ単純なクラスがあります。クラスを初期化すると、静的コンストラクターとインスタンスコンストラクターの両方が呼び出されます。アプリケーション ドメインで一度だけ参照されるのは static だけです。同じクラスの初期化と静的コンストラクターの初期化を再度呼び出すことはできますか? やってみたけど出なかった?クラスでガベージ コレクションを使用した後、main() メソッドで静的コンストラクターを再度呼び出す方法はありますか。
コードは次のとおりです。
メインメソッド呼び出しで:
出力:
呼び出された静的コンストラクター 呼び出されたインスタンス コンストラクター 呼び出されたインスタンス コンストラクター
これで、静的は再度呼び出されなくなりました。アプリケーションドメインで一度呼び出されるためです。しかし、アプリケーション ドメインをアンロードせずに再度呼び出す方法はありますか。ここで GC クラスを使用できますか?
ありがとう。パル
c# - C# インスタンス コンストラクターと静的コンストラクター
2つの違いは何ですか?私は1種類のコンストラクターしか使用していませんが、それは静的コンストラクターだと思います。C++ と Java のみに精通している。
c# - クラスのロードを強制する
C#または.net ILに、型初期化子(静的コンストラクター)を持つクラスに、パラメーターにアクセスせずに、それ自体をロードするように強制する方法はありますか?
私がクラスを持っていると仮定して
この行を印刷する方法はありますか?
クラスは静的であるため、初期化を強制するためにインスタンス化することはできません。また、パブリックメンバーがないため、それらにアクセスして開始することはできません。
c# - 静的フィールドでの奇妙な動作
カスタム列挙型クラスを機能させようとしています。これにより、ユーザーフレンドリーな識別子と任意の関連付けられた値を使用して列挙型を作成できるようになります。ここまでは順調ですね:
そして今私の問題:
次のステートメントでは、2ではなく0が返されます。問題はbeforefieldinitが原因だと思います。静的フィールドを強制的にロードする特定の列挙型のメソッドを直接呼び出すことでこれを回避できますが、これは最善の解決策ではないと思います。
ヒント:ここでは、列挙型の[UserfriendlyName()]属性を提案しないでください。私はすでにそれらを知っています。
編集 ありがとう、ハンス。私は確かに自分のコードにタイプミスがあり、間違ったジェネリックスペシャライゼーションと呼んでいました。
ここで私の質問は、各サブクラスのItemListの再定義を取り除くことができるかということですが、静的フィールドを初期化するためにこれが必要なようです。
c# - 不明なタイプの静的コンストラクターを明示的に実行するにはどうすればよいですか?
さまざまなクラスの静的コンストラクターに初期化コードがあります。インスタンスを作成することも、タイプを事前に知ることもできません。クラスがロードされていることを確認したいと思います。
私はこれを試しました:
しかし、MemberAccessExceptionが発生しました:タイプ初期化子は呼び出し可能ではありませんでした。
これは、cctorがプライベートだからだと思いますか?アーキテクチャを変更せずにこれを修正する方法はありますか?
編集:を使用して回避策を見つけましたRuntimeHelpers.RunClassConstructor
が、この方法はMSDNにほとんど文書化されていないようで、ハックなのか、合理的な製品システムのような方法なのかわかりません。
c# - 静的コンストラクターの使用は何ですか?
静的コンストラクターの使い方を教えてください。なぜ、いつ静的コンストラクターを作成し、それをオーバーロードすることは可能ですか?
c# - 基本クラスの静的コンストラクターが呼び出されるようにするための最良の方法は何ですか?
C#の静的コンストラクターに関するドキュメントには次のように書かれています。
静的コンストラクターは、静的データを初期化するため、または1回だけ実行する必要がある特定のアクションを実行するために使用されます。最初のインスタンスが作成される前、または静的メンバーが参照される前に、自動的に呼び出されます。
その最後の部分(それが自動的に呼び出されるときについて)は私をループに投げ込みました。その部分を読むまでは、何らかの方法でクラスにアクセスするだけで、その基本クラスの静的コンストラクターが呼び出されたことを確認できると思いました。ドキュメントをテストおよび調査したところ、これは当てはまらないことが明らかになりました。基本クラスの静的コンストラクターは、その基本クラスのメンバーが具体的にアクセスされるまで実行されることが保証されていないようです。
さて、ほとんどの場合、派生クラスを扱っているときは、インスタンスを作成し、これが作成中の基本クラスのインスタンスを構成するため、静的コンストラクターが呼び出されると思います。しかし、派生クラスの静的メンバーのみを扱っている場合はどうなりますか?
これをもう少し具体的にするために、私は以下のコードが機能すると思いました:
クラスにアクセスすると、;Type<T>
の静的コンストラクターが自動的に呼び出されると思いました。TypeBase
しかし、そうではないようです。Type<int>.Name
はnull
、であり、上記のコードは空の文字列を出力します。
ダミーメンバー(Initialize()
何もしない静的メソッドなど)を作成する以外に、派生型のいずれかが使用される前に、基本型の静的コンストラクターが呼び出されるようにするためのより良い方法はありますか?
そうでなければ...ダミーメンバーです!
c# - 静的コンストラクターの実行の追跡
ここで、クラスの1つの静的コンストラクターが呼び出される前に呼び出されるという問題に遭遇しています。(つまり、DI/IoC が設定されておらず、サービス ロケーターから null/例外が返されています)。
残念ながら、私は静的コンストラクターをあまり制御できません。なぜ DI/IoC のセットアップに依存しているのかを聞かないでください。
私のアプリでは、IoC の準備が整う前に、このクラス static またはそれ以外を参照する必要はありませんが、静的コンストラクターはとにかく実行されています。
コンストラクターが実行された原因となった行を特定する簡単な方法はありますか? 注: static constructor
ASP.NET のリモート デバッガーが Web サーバー (Global.asax.cs) に接続できるようになる前に、これがすべて発生するため、ブレークポイントを設定できません。