問題タブ [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.
vb.net - プロパティ呼び出し中にプロパティ オブジェクトを設定する
このアプローチが正しいかどうか、またはこれを行うためのより良い方法があるかどうかを知りたいです。
基本的に、他の多くのクラスを変数として持つ Person クラスがあり、各カスタム クラスは Person ID を渡すことによってインスタンス化され、そのクラスはその ID を使用して必要なデータを取得します。プロパティを介して変数クラスを公開します。
現在、Person クラスのインスタンスを作成するときに変数クラスをインスタンス化しています。これらの数が多いということは、Person クラスのインスタンス化にかかる時間が長くなっていることを意味します。私の考えは、変数クラスのインスタンス化を Property 宣言に移動し、まだ行われていない場合はここで If ステートメントを使用してインスタンス化することでした。
上で述べたように、このアプローチは正しいですか、それともより良い方法ですか?
ありがとう
.net - クラスの初期化中のアプリケーション終了イベントへの対応
アプリケーションを起動するとき、デフォルト データのセットを作成するために特定のファイルを読み取るために必要なクラスがいくつかあります。
(私にとって) これを行う論理的な場所は、Shared クラスのコンストラクターです。デフォルトファイルの読み取りが失敗した場合、クラスレベルのイベントをスローするという考えです。残念ながら、このようなイベントにアクセスしようとすると、ハンドラーをアタッチするために、イベントがアタッチされる前にクラス コンストラクターが起動されるため、これは機能しません。失敗した場合、コンストラクターが開始され、fail イベントが発生し、コンストラクターが完了し、イベントが発生した後にイベント ハンドラーがアタッチされます。
私が考えることができる他の唯一の解決策は、クラスに「typeInitializedSuccessfully」ブール値プロパティを与え、クラスのインスタンスを構築するためのすべての呼び出しの周りに try/catch ブロックを配置することです。
誰かがよりエレガントなソリューションを提案できますか?
編集:これは基本的なクラスであり、ほぼすべてのソフトウェアツールで何らかの形で使用されるため、将来のプログラマーに型初期化子を呼び出す必要があることを通知するソリューションが非常に望ましいと考えています。ソリューションとして共有コンストラクター。
java - 静的初期化子で返す
これは有効なコードではありません:
これはばかげた例ですが、静的クラス コンストラクターではできませんreturn;
。なんで?これには正当な理由がありますか?誰かがこれについてもっと知っていますか?
ですから、私がすべき理由は、そこでreturn
構築を終了することです。
ありがとう
c# - 未使用のコンストラクターで型を参照する必要があるのはなぜですか?
ClassA
次のように、別のクラスのコンストラクターを呼び出す 1 つのメソッドを含むクラス ( ) があるとします。
クラスClassB
は次のようになります。
...そしてClassC
さらに簡単です:
これらのクラスを独自のアセンブリに配置し、ソリューション全体をコンパイルすると、エラーは発生しません。しかし、using ステートメントを次のように置き換えると:
[mynamespace].ClassC
inへの参照を追加するように求めるコンパイル エラーが表示されClassA
ます。私はまったく呼び出していないのでClassB(ClassC myC)
、これは私には意味がありません.使用するかどうかに関係なく、他のコンストラクターのタイプを含める必要があるのはなぜですか? ClassC
ライセンス取得済みまたは入手困難なアセンブリに含まれていた場合はどうなりますか? これは、開発者が避けるべき悪い設計の例ですか、それともここに何かが欠けていますか?
c++ - テンプレートクラスのメンバーを初期化する際の問題
コードがコンパイルされません。以下は私のコードです
このエラーが発生します:
error: uninitialized member 'TemplateClass<int>::constMember' with 'const' type 'const int'
データメンバーの初期化にはコンストラクターを使っていると思いました。どうしたの????
php - PHP での jQuery スタイルのコンストラクター
jQuery と同様の方法で新しい PHP オブジェクトをインスタンス化する方法はありますか? オブジェクトを作成するときに可変数の引数を割り当てることについて話しています。たとえば、次のようなことができることを知っています。
でも、そのうちのいくつかだけを設定したいのかもしれません。次のようなものです:
これは、jQuery やその他のフレームワークでの方法に沿ったものです。これはPHPに組み込まれていますか?それを行う方法はありますか?それとも避けるべき理由ですか?
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" を実行する必要があることに注意してください。そうしないと、多くのエラーや混乱に直面することになります。その名前が示すことを行います。
c++ - C++ のテンプレート化されたクラスとコンストラクターの初期化
テンプレート化されたクラス Foo があります。
次に、Foo クラスの属性であり、テンプレート パラメーターとして Foo クラス自体を取る Attr という別のテンプレート クラスがあります。
テンプレートの最初のパラメーターを SomeType としてキャストして、コンストラクターで (Attr 型の) _attr を初期化したい。
Foo コンストラクターの実装:
これはコンパイルされません:
エラー: ')' トークンの前にプライマリ式が必要です
そのエラーは、SomeType が認識されなかったかのように、Foo コンストラクター実装のキャスト行を参照しています。
インスタンスができましたが、それでも同じエラーが発生します。
c++ - 「this」は関数として使用できません
C++ では、Java がコンストラクターへの呼び出しを処理する方法をエミュレートしようとしています。私の Java コードでは、2 つの異なるコンストラクターがあり、一方が他方を呼び出すようにしたい場合は、単純にthis
キーワードを使用します。例:
このコードでは、Constructor2 (単一の文字列を渡す) でオブジェクトをインスタンス化することにより、Constructor1 を呼び出すだけです。これはJavaではうまく機能しますが、C++で同様の機能を得るにはどうすればよいですか? this
キーワードを使用すると、文句を言って教えてくれ'this' cannot be used as a function
ます。
delphi - Delphi XE: ジェネリックを使用するクラスでクラス コンストラクターが呼び出されない
次の例を考えてみましょう (私は Delphi XE を使用しています)。
クラスコンストラクターは呼び出されないため、「作成されたクラス」という行は出力されません。ただし、一般化を削除TTestClass<T>
して標準クラスTTestClass
にすると、すべてが期待どおりに機能します。
ジェネリックで何かを見逃していますか?それとも単に機能しませんか?
これについての考えは高く評価されます!
ありがとう、 -- ステファン --