問題タブ [abstract-class]
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# - 抽象クラス、コンストラクタ、Co
さて、C# コードの一部を再利用しようとしています。これは、UDP サーバーを使用した抽象クラスであり、次のように表示されます。
http://clutch-inc.com/blog/?p=4
次のような派生クラスを作成しました。
そして私のアプリでは、次のような派生クラスのインスタンスを作成しました:
しかし、エラーが発生し、その理由がよくわかりません。助けてください。
- 「TheProject.TheServer」には、「1」引数を取るコンストラクターが含まれていません
- 「TheProject.UDPServer.Start()」は、保護レベルが原因でアクセスできません
- 「TheProject.UDPServer」には、「0」の引数を取るコンストラクターが含まれていません
java - 抽象クラスにコンストラクターとプライベート メンバーが必要なのはなぜですか?
抽象クラスにコンストラクターとプライベート メンバーが必要なのはなぜですか? そのクラスのインスタンスを作成するつもりはありません。
java - オーバーライドされたメソッドに特殊なパラメーターを設定することは可能ですか?
「shape」という抽象的な親クラスがあり、複数のサブクラス(三角形、正方形、円...)があるとします。すべてのサブクラスが実装する必要のある親の「shape」クラスに抽象メソッドを定義したいので、それを「draw」と呼びましょう。したがって、すべての形状サブクラスは「draw()」メソッドを提供する必要があります。ただし、drawメソッドは「Stencil」タイプのパラメーターを取り、すべての形状サブクラスが任意のステンシルだけを使用できるわけではありません。
したがって、1つの抽象的な「形状」クラス、複数の形状サブクラス、および複数のステンシルがあります。shapeクラスで定義されたdrawメソッドが必要です。正方形はStencil1を使用し、円はStencil2を使用する場合があります。
ジェネリックスでうまくいくと思いますが、よくわかりません。これらのクラスは他のクラスでも使用されるため、各形状サブクラスは特定のステンシルを使用して描画メソッドを定義する必要があります。コンパイラは、すべてのプログラマに、そのクラスでサポートされているステンシルを使用して描画メソッドを呼び出すように強制する必要があります。「publicabstractvoiddraw(Stencil s)」のような抽象メソッドを定義することはできません。これは、プログラマーが任意のステンシルをsquareクラスに渡すことができるのに対し、squareクラスは「Stencil1」のみをサポートするためです。
何か案は?
Update1: シェイプクラスはサブクラスで使用されるステンシルを気にしないことを追加する必要がありますが、サブクラスは他のクラスでも使用されるため、サポートされているステンシルのみがコンパイラによって受け入れられるようにdrawメソッドを定義することが重要です。 。
c# - 抽象ジェネリック型の変数を宣言するためのC#構文
次のように定義されたクラスがあります。
具体的なサブクラスでは、タイプをそのように定義します。
次の層には、リポジトリオブジェクトをプライベート変数として保持するビジネスオブジェクトがあります。
これは問題ありませんでした。
ただし、これをすべてのビジネスオブジェクトの親クラスにリファクタリングしました。この親クラスはリポジトリを保持し、リポジトリなどを破棄するためのDisposeパターンを実装します。
私の問題は、変数の宣言に適切な構文を取得できないことです。
私が来た最も近いものは;
しかし、これはコンパイルエラーを引き起こします:
「エラー1'System.Data.Linq.DataContext'は、ジェネリック型またはメソッド'....リポジトリ'..のパラメータ'TDataContext'として使用するために、パブリックパラメータなしコンストラクタを備えた非抽象型である必要があります。 「」
私は他のさまざまなことを試しましたが、他の問題にぶつかりました。
この抽象クラスを継承するビジネスレイヤーオブジェクトでは、キャストで_repository変数を作成して使用しています。
- 親でこの宣言を正しく取得できると仮定すると、これで問題ないと思います。
これを機能させることができない場合は、各ビジネスオブジェクトで完全/具象型の詳細を使用して_repositoryを宣言し、それぞれにdisposeパターンを実装してクリアする必要があります。世界の終わりではありませんが、私はそうする必要はありません。
c++ - Pimpl イディオムと純粋な仮想クラス インターフェイス
プログラマーが Pimpl のイディオムまたは純粋な仮想クラスと継承のいずれかを選択する理由は何だろうと思っていました。
pimpl イディオムには、パブリック メソッドごとに 1 つの明示的な追加の間接化と、オブジェクト作成のオーバーヘッドが伴うことを理解しています。
一方、純粋な仮想クラスには、継承する実装のための暗黙の間接化(vtable)が付属しており、オブジェクト作成のオーバーヘッドがないことを理解しています。
編集:ただし、外部からオブジェクトを作成する場合はファクトリが必要です
pimpl イディオムよりも純粋仮想クラスが望ましくない理由は何ですか?
python - 抽象クラス+ミックスイン+Pythonでの多重継承
だから、コードはおそらく私が言葉でできるよりもうまくやろうとしていることを説明していると思うので、ここに行きます:
結果:
抽象/インターフェースクラスの要件を満たすためにミックスインクラスを取得しようとしています。私は何が欠けていますか?
c++ - C++ で非仮想パブリック インターフェイスとスコープ ロックを使用してデッドロックを回避する
私には厄介な問題が発生しました。簡単に回避できる状況を見つけたようですが、a) プログラミング中に集中力が途切れた場合、または b) 他の誰かが私のインターフェイスの実装を開始し、処理方法がわからない場合、問題が発生する可能性があります。この状況。
これが私の基本的なセットアップです:
いくつかのデータ型への汎用インターフェイスとして使用している抽象クラスがあります。非仮想パブリック インターフェイス パラダイム (Sutter、2001 年) とスコープ ロックを採用して、ある程度のスレッド セーフを実現しました。インターフェイス クラスの例は次のようになります (スコープ付きロックとミューテックスの実装に関する詳細は、関連性がないと思われるため省略しました)。
aImp と bImp を実装するのはユーザー次第ですが、ここで問題が発生します。aImp が bImp を使用する何らかの操作を実行する場合、これを行うのは非常に簡単です (ある意味ではほとんど論理的です)。
デッドロック。もちろん、これに対する簡単な解決策は、パブリック バリアントではなく、保護された仮想関数を常に呼び出すことです (上記のスニペットで B( ) を bImp( ) に置き換えます)。しかし、私がミスを犯したり、さらに悪いことに、他の人が首を吊るすのを許したりした場合、簡単に首を吊るすことはできないようです.
抽象クラスの実装者がコンパイル時にこれらのパブリック関数を呼び出さないようにするか、デッドロックの解決策を回避するのに役立つ方法はありますか?
キックのために、いくつかのミューテックスは、デッドロックの問題を回避する操作を可能にします。例として、Windows 関数の EnterCriticalSection と LeaveCriticalSection を使用してこれを実装すると、問題はありません。しかし、プラットフォーム固有の機能は避けたいと思います。私は現在、スコープ付きロックの実装でboost::mutexとboost::shared_mutexを使用していますが、私が見た限りでは、デッドロックを回避しようとはしていません(私はほとんど好きだと思います)。
visual-studio-2008 - VS2008 で統合単体テストを使用して抽象クラスをテストする方法
これができるかどうかについての情報は見つかりません。
抽象クラス内にいくつかの保護されたメソッドがあり、これらをテストしたいと考えています。
クラスから継承してその実装をテストしたくありません(技術的に厳密には単体テストではないことに加えて、VS2008では継承されたメソッドをテストできません)。
統合単体テストのコンテキスト内でこの問題を解決したいと思います...たとえば、nUnitでこれが可能になることは承知しています。
何かご意見は?提案?
java - 抽象クラスは serialVersionUID を持つべきか
Java では、クラスが Serializable を実装しているが抽象的である場合、serialVersionUID long を宣言する必要がありますか、それともサブクラスはそれのみを必要としますか?
この場合、型の目的は RMI 呼び出しで使用されるため、すべてのサブクラスがシリアライゼーションを処理するという意図があります。