問題タブ [class-constructors]

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.

0 投票する
2 に答える
453 参照

vb.net - プロパティ呼び出し中にプロパティ オブジェクトを設定する

このアプローチが正しいかどうか、またはこれを行うためのより良い方法があるかどうかを知りたいです。

基本的に、他の多くのクラスを変数として持つ Person クラスがあり、各カスタム クラスは Person ID を渡すことによってインスタンス化され、そのクラスはその ID を使用して必要なデータを取得します。プロパティを介して変数クラスを公開します。

現在、Person クラスのインスタンスを作成するときに変数クラスをインスタンス化しています。これらの数が多いということは、Person クラスのインスタンス化にかかる時間が長くなっていることを意味します。私の考えは、変数クラスのインスタンス化を Property 宣言に移動し、まだ行われていない場合はここで If ステートメントを使用してインスタンス化することでした。

上で述べたように、このアプローチは正しいですか、それともより良い方法ですか?

ありがとう

0 投票する
1 に答える
80 参照

.net - クラスの初期化中のアプリケーション終了イベントへの対応

アプリケーションを起動するとき、デフォルト データのセットを作成するために特定のファイルを読み取るために必要なクラスがいくつかあります。

(私にとって) これを行う論理的な場所は、Shared クラスのコンストラクターです。デフォルトファイルの読み取りが失敗した場合、クラスレベルのイベントをスローするという考えです。残念ながら、このようなイベントにアクセスしようとすると、ハンドラーをアタッチするために、イベントがアタッチされる前にクラス コンストラクターが起動されるため、これは機能しません。失敗した場合、コンストラクターが開始され、fail イベントが発生し、コンストラクターが完了し、イベントが発生したにイベント ハンドラーがアタッチされます。

私が考えることができる他の唯一の解決策は、クラスに「typeInitializedSuccessfully」ブール値プロパティを与え、クラスのインスタンスを構築するためのすべての呼び出しの周りに try/catch ブロックを配置することです。

誰かがよりエレガントなソリューションを提案できますか?

編集:これは基本的なクラスであり、ほぼすべてのソフトウェアツールで何らかの形で使用されるため、将来のプログラマーに型初期化子を呼び出す必要があることを通知するソリューションが非常に望ましいと考えています。ソリューションとして共有コンストラクター。

0 投票する
6 に答える
2216 参照

java - 静的初期化子で返す

これは有効なコードではありません:

これはばかげた例ですが、静的クラス コンストラクターではできませんreturn;。なんで?これには正当な理由がありますか?誰かがこれについてもっと知っていますか?

ですから、私がすべき理由は、そこでreturn構築を終了することです。

ありがとう

0 投票する
3 に答える
377 参照

c# - 未使用のコンストラクターで型を参照する必要があるのはなぜですか?

ClassA次のように、別のクラスのコンストラクターを呼び出す 1 つのメソッドを含むクラス ( ) があるとします。

クラスClassBは次のようになります。

...そしてClassCさらに簡単です:

これらのクラスを独自のアセンブリに配置し、ソリューション全体をコンパイルすると、エラーは発生しません。しかし、using ステートメントを次のように置き換えると:

[mynamespace].ClassCinへの参照を追加するように求めるコンパイル エラーが表示されClassAます。私はまったく呼び出していないのでClassB(ClassC myC)、これは私には意味がありません.使用するかどうかに関係なく、他のコンストラクターのタイプを含める必要があるのはなぜですか? ClassCライセンス取得済みまたは入手困難なアセンブリに含まれていた場合はどうなりますか? これは、開発者が避けるべき悪い設計の例ですか、それともここに何かが欠けていますか?

0 投票する
2 に答える
1443 参照

c++ - テンプレートクラスのメンバーを初期化する際の問題

コードがコンパイルされません。以下は私のコードです

このエラーが発生します:

error: uninitialized member 'TemplateClass<int>::constMember' with 'const' type 'const int'

データメンバーの初期化にはコンストラクターを使っていると思いました。どうしたの????

0 投票する
4 に答える
175 参照

php - PHP での jQuery スタイルのコンストラクター

jQuery と同様の方法で新しい PHP オブジェクトをインスタンス化する方法はありますか? オブジェクトを作成するときに可変数の引数を割り当てることについて話しています。たとえば、次のようなことができることを知っています。

でも、そのうちのいくつかだけを設定したいのかもしれません。次のようなものです:

これは、jQuery やその他のフレームワークでの方法に沿ったものです。これはPHPに組み込まれていますか?それを行う方法はありますか?それとも避けるべき理由ですか?

0 投票する
3 に答える
1253 参照

delphi - そのクラス コンストラクターでクラス登録が行われるときにクラス コンストラクターが呼び出されない

私は、それぞれの実装者クラスで抽象クラス参照を保持する TDictionary に基づいて、単純な依存性注入/制御システムの反転を書いています。

私の目標は次のとおりです。

  • タイプによる直接のインスタンス化は避けてください (明らかに)。
  • クラスのユニットを dpr に含めるだけで、それが登録され、di/ioc システムを介して選択およびインスタンス化できるようになります。
  • 実装セクションでのみ具体的な実装クラスを宣言します。
  • 初期化セクションの代わりにクラス コンストラクターを使用します。

ところで、クラス コンストラクターを使用してスマート リンクを利用することと、クラスを利用可能にするためにユニットを含めるだけで十分であることは、互いに打ち負かしていることを認識しています。他の理由でも、初期化セクションの代わりにクラス コンストラクターを使用したいと考えています。また、クラス コンストラクターと初期化セクションに分割するのではなく、すべてのクラスの初期化/登録コードをまとめておきたいと考えています。

問題

ファクトリへのクラスの登録は、クラス コンストラクターで行う必要があります。残念ながら、コンパイラは、独自のクラス コンストラクターでその型を使用するだけでは、クラスが "変更" されているとは見なしません。

登録関数を初期化セクションに入れると、コンパイラはクラスが変更されたと判断し、クラス コンストラクターを呼び出します。しかし、それは、すべてのクラス初期化コードをクラス コンストラクターに保持するという私の演習の目的を無効にします。

2 つの質問

  • コンパイラーは、独自のクラスコンストラクターでのクラスの使用を「クラスに触れる」と見なすべきですか、それともコンパイラーが行うことを期待するには多すぎますか?
  • 初期化セクションを使用せずに目標を達成する方法について、賢いアイデアを持っている人はいますか?

アプリケーションで使用される抽象クラス:

TThisApplication の具体的な実装クラス (実装セクションで宣言されています!)

TThisApplication のインスタンスを取得する関数:

これは現在、別の関数でコーディングされていますが、工場に移動することができます。

完全なサンプルコード

誰かが実験したい場合は、テスト プロジェクトの完全なコードをhttp://www.bjsoftware.com/delphistuff/stackoverdlow/classconstructors.zipで入手できます。

zip の内容:

  • 4 つのプロジェクトはすべて同じソース ファイルを使用し、条件定義のみが異なります (そのため、dproj も含まれています)
  • 4 つのソース ファイル
  • groupproj とその dsk と 4 つのプロジェクトすべて
  • 4 つのプロジェクトすべてを実行する RunTestApps.cmd
  • RunTestApps.cmd の実行結果を含む Results.txt
  • この質問のテキストを含む WriteUp.txt

すべての dcu と exe がソース ディレクトリに移動するため、常に "Build All Projects" を実行する必要があることに注意してください。そうしないと、多くのエラーや混乱に直面することになります。その名前が示すことを行います。

0 投票する
5 に答える
178 参照

c++ - C++ のテンプレート化されたクラスとコンストラクターの初期化

テンプレート化されたクラス Foo があります。

次に、Foo クラスの属性であり、テンプレート パラメーターとして Foo クラス自体を取る Attr という別のテンプレート クラスがあります。

テンプレートの最初のパラメーターを SomeType としてキャストして、コンストラクターで (Attr 型の) _attr を初期化したい。

Foo コンストラクターの実装:

これはコンパイルされません:

エラー: ')' トークンの前にプライマリ式が必要です

そのエラーは、SomeType が認識されなかったかのように、Foo コンストラクター実装のキャスト行を参照しています。

インスタンスができましたが、それでも同じエラーが発生します。

0 投票する
5 に答える
1517 参照

c++ - 「this」は関数として使用できません

C++ では、Java がコンストラクターへの呼び出しを処理する方法をエミュレートしようとしています。私の Java コードでは、2 つの異なるコンストラクターがあり、一方が他方を呼び出すようにしたい場合は、単純にthisキーワードを使用します。例:

このコードでは、Constructor2 (単一の文字列を渡す) でオブジェクトをインスタンス化することにより、Constructor1 を呼び出すだけです。これはJavaではうまく機能しますが、C++で同様の機能を得るにはどうすればよいですか? thisキーワードを使用すると、文句を言って教えてくれ'this' cannot be used as a functionます。

0 投票する
2 に答える
2134 参照

delphi - Delphi XE: ジェネリックを使用するクラスでクラス コンストラクターが呼び出されない

次の例を考えてみましょう (私は Delphi XE を使用しています)。

クラスコンストラクターは呼び出されないため、「作成されたクラス」という行は出力されません。ただし、一般化を削除TTestClass<T>して標準クラスTTestClassにすると、すべてが期待どおりに機能します。

ジェネリックで何かを見逃していますか?それとも単に機能しませんか?

これについての考えは高く評価されます!

ありがとう、 -- ステファン --