問題タブ [class-helpers]

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 投票する
10 に答える
1130 参照

delphi - 新しいコードの開発にクラス ヘルパーを使用する必要がありますか?

Delphi 8 では、VCL/RTL を .NET オブジェクト階層にマッピングする目的でクラス ヘルパーが導入されました。クラスをオーバーライドしたり元のクラスを変更したりせずに、既存のクラスにメソッドを注入できます。それ以降のバージョンの Delphi では、クラス ヘルパーが改善され、Win32 に移植されました。

ヘルプには、「新しいコードを開発するときに使用する設計ツールと見なすべきではありません」と書かれています。

クラス ヘルパーは従来の OOP に違反していますが、それが悪いことだとは思いません。この警告は保証されますか?

新しいコードを開発するときにクラス ヘルパーを使用する必要がありますか?

新しいコードを開発するときにそれらを使用しますか?

なぜですか、そうでないのですか?

Malcolmのコメントによると: 新しいコードとは、いくつかのサード パーティ ライブラリ、いくつかの既存のコード、そして作成中のコードがある日常的なアプリケーション開発を意味します。

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

delphi - ジェネリッククラスのクラスヘルパー?

Delphi 2009 を使用しています。ジェネリック クラス、つまり TQueue のクラス ヘルパーを作成することは可能ですか。明らかなこと

機能しない、機能しない

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

delphi - RTTIを使用して実行時にDelphiのすべてのクラスヘルパーを見つけますか?

Delphi 2010 の拡張 RTTI は、実行時に定義済みのクラスおよびレコード ヘルパーをリストする方法を提供しますか?

私の知る限り、クラスに対して複数のクラス ヘルパーが定義されている場合、Delphiはヒントや警告を表示しません。クラス ヘルパーの検出は、「品質保証」に役立つルーチンになる可能性があります。

ps もちろん、サードパーティのコンポーネントやライブラリをソース コードなしで使用してはならないことはわかっています。これにより、クラス ヘルパーの grep が容易になります。

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

delphi - 独自のメソッドを維持する1つのクラス内に異なるクラスをカプセル化する方法は? (デルファイの多重継承?)

私は現在、無料の教育用デジタル回路シミュレーターを書き直して、その機能に慣性を追加しています。私の問題は、イベントを元のクラスにディスパッチして事前精緻化を追加する方法です。私はこのようなものを持っています:

これは、ContFunc が希望どおりに C2.Func1 を呼び出し、フォーム TC1 を継承する 300 を超えるコンポーネントの動作を特殊化することを意味します。

しかし今、いくつかの特別な操作を追加する必要があります (Func1 が呼び出されるたびに TC1 からのすべてのコンポーネントの子孫に等しく、その操作中に TC2-n.Func1 を呼び出す必要があるかどうかを選択します (祖先 TC1 のプロパティを変更した後)。 TC1 のすべての子孫を変更せずに、きれいにそれを行う方法はありますか? 次のようなヘルパー クラス (非推奨?) を使用できますか?

TH を追加すると、TContainer が Func1 を呼び出すと、誰が呼び出されますか? TH.Func1 ではなく、TC2.Func1 を呼び出します。単一のヘルパークラスを作成せずに子孫メソッド Func1 をオーバーライドする方法はありますか? TH から TC2-n の 300 個の子孫関数 Func1 を呼び出すことができます。

つまり、c1.Func1; への Tcontainer 呼び出しによって、次のような呼び出しを取得する方法を見つけようとしています。

TC2.Func1 を呼び出す NewFunc1 (すべての TC1 子孫に等しい) (TC1 の子孫には異なる)。

誰でもそれを行う方法を提案できますか?

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

c++ - クラスとクラスヘルパー

私は C++ を初めて使用するので、クラス ヘルパーについて質問したいと思います。

さて、私にはクラスがあり、他のファイルにあるクラスヘルパーは何ですか。そのためには名前空間を使用する必要がありますが、このファイルを複数回 #include することはできません (再定義のため)。

他のクラスでクラス ヘルパーを作成する正しい方法は何ですか? そのために静的クラスを使用する必要がありますか?

UPD:わかりましたが、適切な部分を取得しましたが、クラス ヘルパーに名前空間または静的クラスを使用する必要がありますか? (名前空間の代わりにクラスを使用する利点は実際にはありませんが、私は初心者なのでよくわかりません)。UPD2: ああ。このためのクラスを使用すると、ヘルパー クラスのサブクラスを作成できます。

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

delphi - Delphi クラスの厳密に保護されたプロパティにアクセスしますか?

バグを回避するために (このプロパティの値に基づいて) 検証を作成する必要があるため、厳密に保護されたプロパティにアクセスする必要があります。(このプロパティを持つサードパーティ クラスのソース コードはありません) クラス (インターフェイス) と dcu の定義しかありません (そのため、プロパティの可視性を変更することはできません)。問題は、厳密に保護されたプロパティにアクセスする方法はありますか? ( Hallvard Vassbotn ブログを実際に読んでいますが、この特定のトピックについては何も見つかりません。)

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

delphi - クラスのアドレスと変数へのオフセットを使用して、クラス var の値にアクセスするにはどうすればよいですか?

彼のインスタンスと変数へのオフセットを使用して、クラスの厳密なプライベート クラス var値にアクセスする必要があります。

これまでにこれを試しました。このサンプルクラスを確認してください

ご覧のとおり、関数 GetFooValue は、foo 変数がクラス var のように宣言されていない場合にのみ機能します。

問題は 、次のように宣言されているときGetFooValueの値を取得するために、どのように変更する必要があるかですFoostrict private class var Foo: Integer;

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

delphi - クラスヘルパーを使用して、クラスの厳密なプライベートメンバーにアクセスするにはどうすればよいですか?

これは、次のフォローアップの質問です。オブジェクトの保護されたプロシージャを非表示にする方法は?
(私はクラスヘルパーの概念全体について少し曖昧です)

次のようなクラスがあるとします。

同じユニットに子孫クラスを追加することでソースコードがあれば、プライベートメソッドにアクセスできることはわかっています。

2つの質問があります: -メンバー
にアクセスするためにクラスヘルパーを雇うにはどうすればよいですか?-別 のユニットでクラスヘルパーを使用して(厳密な)プライベートメンバーにアクセスできますか?strict private

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

delphi - オブジェクトがクラス ヘルパー内で作成または破棄されているかどうかを知る方法はありますか?

実行時にこのサブコンポーネントにアクセスするために、コンポーネントがサブコンポーネント (ポップアップ メニューなど) を作成するためのクラス ヘルパーはほとんどありません。Singleton TDictionary を作成します。

私の質問は、TDictionary からサブコンポーネントを削除するために所有者コンポーネントが破棄されていることをどのように知ることができるかということです。

特殊なコンポーネントの場合はデストラクタに追加しますが、クラス ヘルパーにコンストラクタやデストラクタを追加することはできません。

編集 - 解決策

TObject をパラメーターとして受け入れる基本オブジェクトを作成しました。使用する場合、削除アクションは手動で行う必要があります。

次に、そこから新しいクラスを継承し、TComponent のみを受け入れるようにメソッドをオーバーライドしました。コードの関連部分は次のようになります。

このアプローチを使用して、実際のニーズを解決し、後で簡単に拡張できるようにします。