問題タブ [abstract]
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.
.net - Windows フォームを抽象クラスとして使用する - どのパターンを使用するか?
何度も何度も出てくる状況に苦しんでいますが、自分のやり方が間違っているのか、それとも別のやり方でできるのかわかりません.
例:
私は、データグリッドの検証を実行し、データグリッドビューなどでマウスの右クリックを解釈するためのいくつかのプライベートメソッドを備えた DataGridView を持つ Windows フォームを持っています。このウィンドウフォームは本質的に「抽象」クラスであり、直接インスタンス化されることはありません。
次に、この基本クラスから継承し、さまざまな方法 (テンプレート パターン) でカスタマイズします。たとえば、datagridview の列や、それらの列に固有の特定の書式設定メソッドなどを定義します。
これらのクラスを使用すると、基本クラスの public メソッドがインターフェイスを形成し、必要な特定のタイプの datagridview をインスタンス化し、共通インターフェイスを介して操作できます。素晴らしい。
問題:
主な問題は、Visual Studio デザイナがこれらの抽象クラスをインスタンス化できないため、グラグラをスローせずに Windows フォーム クラスを抽象として実際に宣言できないことです。
いくつかの解決策:
現時点では、オーバーライドしたい基本クラスのメソッドを「実装」しています。
少なくとも、インターフェイスを形成するこれらのメソッドのいずれかをオーバーライドするのを忘れた場合。これは私にはかなり臭いようですが、私はそれがあまり好きではありません.
私が考えたもう 1 つの解決策は、継承を完全に廃止し、インターフェイス (IMyDataGrid など) を定義して、それを各 datagridview クラス (一種の戦略パターン) に実装することでした。ただし、ここでの問題は、継承によって多くの異なるフォームを作成し、それらにデータグリッドビューをドロップする必要があることを意味するコードの再利用の利点を失うことです。同じコードをそれぞれに効果的にコピーして貼り付けます。悪い。
これを達成しようとするより良い方法はありますか?
c# - 抽象基本クラスのオーバーライドされたプロパティからスローされるスタック オーバーフロー例外
次の(簡潔にするためにトリミングされた)宣言を持つ基本クラスがあります。
次のクラスで使用されます。
特定のオブジェクトをモデルにバインドすると (私の実装はたまたま MVC です)、RecordID と ObjectName にのみアクセスすると、オブジェクトは正常に返されますが、get または set アクセサーが my (オーバーライド) ステータスはヒットです。
私はすでにSOで同様の質問を見つけました...
プロパティ セットが StackOverflow 例外をスローするのはなぜですか?
...しかし、自動プロパティの実装を見ると、私のコードは正しく、無限ループを作成しないように見えます (しかし、これは事実のようです)。そのプロパティを正しくオーバーライドする方法についてのアイデアはありますか?
ありがとう!
java - 例外を処理するビジネスデリゲート
私は次のようなビジネスデリゲートに関する行の1つで混乱しています。
ビジネスデリゲートは、リモート例外を処理して抽象化します
ここで「抽象的な」という言葉はどういう意味ですか?それらを実装する方法ではなく、詳細を提供するだけですか?
.net - 抽象クラスのシリアル化
シリアル化しようとしていますが、abstactクラスで問題が発生しています。
私は答えをグーグルで検索しました、そして私はこのブログアイテムを見つけました。私はそれとその仕事を試しました。
わかりました、とてもいいです。しかし、アイテムのコメントをチェックしてください:
この方法論は本当の問題を隠しているようであり、それはオブジェクト指向設計パターン、つまりファクトリパターンの不正確な実装です。
新しいファクトリクラスを参照するために基本クラスを変更する必要があるのは、自滅的です。
少し後から考えることで、コードを変更して、任意の派生型を抽象クラスに関連付けることができ(インターフェイスの奇跡を通じて)、XmlIncludeは必要ありません。
ここで実装しようとしていると思われるファクトリパターンをさらに調査することをお勧めします。
コメンターは何について話しているのですか?彼はちょっと漠然としている。誰かがそれをより詳細に(例を挙げて)説明できますか?それとも彼はナンセンスを話しているだけですか?
更新(最初の回答を読んだ後)
なぜコメンターは
ファクトリパターン
と
コードは、任意の派生型を抽象クラスに関連付けることができる場所に変更できます(インターフェイスの奇跡を通じて)
?
彼はこのようなインターフェースを作りたいですか?
c# - 抽象メソッドからの共変リターン型に関する問題
抽象メソッドとリターンタイプの共分散について2日間のビートダウンを締めくくろうとしています。すでに、2つの同様の質問を投稿しており、提供された情報についてコミュニティに永遠に感謝しています。フィニッシュライン。これが私がやろうとしていることです。2つの抽象クラス、RecruiterBaseとCandidateBaseは、どちらもRecruiterAとCandidateAの実装を作成しています。RecruiterBaseには、採用されたすべての候補者がIQueryableを返すようにするための抽象的なメソッドがあります。RecruiterAの実装は、GetCandidates()メソッドをオーバーライドしてIQueryableを返します。
および実装:
RecruitreBaseの実装では、GetCandidates()メソッドが>IQueryable<CandidateA>
の代わりに返されるため、コンパイル時エラーをスローするコンパイルを試みますIQueryable<CandidateBase
。
前の質問(抽象/仮想メソッドからの一般的な戻り型)からの提案を機能させることができなかった後、私はもっとたくさん読んで、SOで次の質問に出くわしました
C#のサブクラスのオーバーライドされたメソッドでサブタイプを返す方法は?
最終的に、私が探していたのは、リターンタイプに共分散を実装する方法であることに気づきました。MarcGravellのスニペットを使用しました...
...私の解決策の基礎として。これで、RecruiterBaseクラスとRecruiterAクラスは次のようになります。
と私の実装...
最終的に探していたものが得られることを期待していましたが、GetCandidates()がCandidateAをCandidateBaseに暗黙的に変換できないため、次のコードでコンパイル時エラーが発生しました。
だから私はキャストを追加しました:
その後、すべてがコンパイルされますが、実際にコントローラーでGetCandidates()を呼び出すと、IQueryable<CandidateBase>
の代わりに戻りますIQueryable<CandidateA>
。だから私は始めたところに戻ってきました。
あなたがこれを最後までやり遂げて、あなたが私を助けることができるならば、私はあなたにあなたの好きなビールの12パックを送ります!
c# - 抽象基本クラスのc#プロパティ
解決できない奇妙な問題があります。次のsnippedをコンパイルしようとすると、次のエラーが発生します。
'AbstractClass'はインターフェイスメンバー'Property'を実装していません(コンパイラエラーCS0535)
オンラインヘルプでは、AbstractClassを抽象化するように指示されています。どこが間違っていたのか誰か教えてもらえますか?
乾杯リュディガー
c# - Linqの結果をAbstractコンストラクタに投影する方法は?
はい、アブストラクトに関する質問をするのはこれで 4 日目です。申し訳ありませんが、SQLServer に関するいくつかの質問に答えて、コミュニティに恩返しをしようと思います。ともかく...
Linq クエリの結果を抽象基本クラス コレクションに射影するにはどうすればよいですか? これは、私の RecruiterBase 抽象クラスからのメソッドです (対応する CandidateBase 抽象クラスもあります)。
上記のメソッドは、Candidate と CandidateBase の間で暗黙的な変換を行うことができないというコンパイル時エラーをスローします。
db.Candidates を db.Candidates.Cast() に変更すると、すべてがコンパイルされますが、型 Candidate と CandidateBase の間に強制演算子が定義されていないというランタイム エラーが発生します。
できません: 抽象を実装できないため、CandidateBase として New CandidateBase { ... } を選択します。
Candidate と Candidate ベースの間に明示的な変換演算子を作成することもできません。
また、匿名型と CandidateBase 型の間で同じランタイム強制例外が発生するため、結果を匿名オブジェクトに投影してから CandidateBase にキャストすることもできません。
この問題は、昨日の質問、 抽象メソッドからの共変の戻り値に関する問題から生じました。
スタン R の答えは、私が物事を複雑にしているというものでした。私は戻って、すべてを単純化し(実装をベースに残し、サブから削除しました)、そのように実装された動作する GetCanidates メソッドになりました:
上記のメソッドはコンパイルして機能します。私は口の中で贈り物の馬を見ようとはしていませんが、現在、ベースタイプのサブタイプへの参照を持っています (結果を CandidateA に射影するとき)、それは奇妙に思えます。基本タイプ内からのサブタイプへの参照が問題ない場合は、私の質問に投票してください。
ありがとう。
完全なクラス定義:
diagram - コードの視覚的/芸術的表現
これに名前があるかどうかはわかりません。私が興味を持っているのは、コードまたはコード開発を高レベルで抽象的かつ美しい方法で表現するためのグラフィカル プログラムがどのようなものかということです。
このようなことについて私が知っている唯一の例は、しばらく前に見たビデオで、リポジトリの周りを移動する光るオーブを使用して、大規模なオープンソース プロジェクトの周りのユーザー コード アクティビティを示していましたが、もう一度見つけることはできません。
この質問が漠然としすぎている場合は申し訳ありません。昨夜、プロジェクトの骨組みを写真として誰かに見せる方法と、コードベースの全体的な形や整頓されたコードベースを一目で識別できるような方法でそれを行うことができるかどうかについて考えていました。プロジェクトが成長するのを見ることができるとしたら、どのように見えますか? これを達成するためのパーサーを作成する際の問題があるとすれば、それは何ですか?
UML ダイアグラムよりも抽象的なものを探しています!
c++ - C ++での仮想関数のインスタンス化の違いは何ですか?
次の2つの宣言の違いは何ですか?
最初のもの(= 0)は「純粋な抽象関数」であると読みましたが、それが2番目のものを作るのは何ですか?
c++ - C ++では、抽象クラスのリストを保持するにはどうすればよいですか?
私は2つの実装されたクラスを持っています:
どちらも、双方向で送受信されるプロトコルメッセージです。
プロトコルの実装では、メッセージキューを作成する必要がありますが、DCMessage
抽象的であるため、次のようなことはできません。
問題は、コンパイラが言うように、純粋な抽象メソッドを持っているため、「DCMessageをインスタンス化できない」ということです。
を削除し=0
て空の中括弧を入れるとDCMessage.cpp
問題は解決しますが、これは単なるハックです。
もう1つの解決策は、2つのDCMsgQueues:DCCmdQueue
とを作成する必要があることDCReplyQueue
ですが、これは些細なことのために複製されたコードです。何か案は?=)