問題タブ [base-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.

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

c# - C#の基本クラスが、継承せずにインターフェイスコントラクトを実装できるのはなぜですか?

私はC#のこの「機能」に出くわしました-インターフェイスメソッドを実装する基本クラスはそれから派生する必要はありません

例:

何が起こるかというと、Derived魔法のようにパブリックメソッドをピックアップし、Base.Funcそれを実装することを決定しますIContract.Func

この魔法の背後にある理由は何ですか?

IMHO:この「準実装」機能は非常に直感的ではなく、コードの検査をはるかに困難にします。どう思いますか?

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

c# - インターフェイスと基本クラスの組み合わせ、これを実装する正しい方法

プロパティとメソッドを指定したいユーザーコントロールがいくつかあります。

これらはすべて「Foo」や「Bar」などのプロパティを持っているため、基本クラスから継承します。基本クラスを使用した理由は、これらのすべてのプロパティを各派生クラスに手動で実装する必要がないためです。

ただし、基本クラスはメソッドを「実行」する方法を知らないため、基本クラスではなく派生クラスにのみ存在するメソッドが必要なので、このためのインターフェイスを使用することを考えています。それを基本クラスに入れる場合、値を返すためにいくつかの本体を定義する必要があり(これは無効になります)、オーバーライドするメソッドが基本を呼び出さないことを常に確認してください。方法

基本クラスとインターフェイスの両方を使用してメソッドを公開するための正しい方法はありますか?それは非常に回りくどいようですが、私がそれをすることについて考えるすべての方法は間違っているようです...

質問が明確でない場合はお知らせください。おそらくばかげた質問ですが、私はこれを正しく行いたいと思います。

編集:あなたの優れた抽象的な提案をしてくれたすべての人々に感謝しますが、これはデザイナーを壊します。抽象が選択可能なオプションではなかった場合、あなたはどうしますか?

0 投票する
7 に答える
5509 参照

c++ - C++ テンプレート基本クラスでのコンパイラ警告

そのコンテキストでは理解できないというコンパイラ警告が表示されます。次のコードから「Child.cpp」をコンパイルすると。(不思議ではありません: 私はクラス宣言を最小限に取り除いたので、内容はあまり意味がありませんが、問題はすぐにわかります)。Visual Studio 2003およびVisual Studio 2008で最高の警告レベルで警告が表示されます。


コード

AbstractClass.h:

Child.h:

Child.cpp:


警告

クラス「Child」は「AbstractClass」から派生しています。「AbstractClass」には、パブリック メソッド「AbstractClass::Cancel()」があります。クラス本体の外側でメソッドを定義すると(コードのように)、コンパイラの警告が表示されます...

AbstractClass.h(7): 警告 C4505: 'AbstractClass::Cancel': 参照されていないローカル関数が [T=int] で削除されました

...「Child.cpp」をコンパイルすると。これはパブリック関数であり、コンパイラは後でこのメソッドを参照するかどうかを判断できないため、これを理解できません。最後に、このメソッドを参照します。main.cpp で呼び出すためです。このコンパイラ警告にもかかわらず、すべてのファイルをコンパイルしてリンクし、プログラムを実行すると、このメソッドは機能します。

Cancel() 関数をインラインとして定義すると (AbstractClass.h でコメントアウトされたコードとして表示されます)、コンパイラの警告は表示されません。もちろん、私のプログラムは動作しますが、この警告を理解したいのですか、それとも単なるコンパイラの間違いですか?

さらに、AbsctractClass をテンプレート クラスとして実装しないと (この場合はテスト目的のためだけに)、コンパイラの警告も表示されません...?


非仮想関数を作成すると、その非仮想関数のコンパイル警告は表示されませんが、これまでのすべての回答は仮想のものを構成していません。これを試して:

知っている限りの答えは役に立ちましたが、質問が完全に答えられているとは思いません。

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

wcf - L2S、WCF、および基本クラスを使用する多層アプリケーション

ある日、L2SとWCFを使用してこの優れた多層アプリケーションを構築することにしました。簡略化されたモデルは、データベース-> L2S->ラッパー(DTO)->クライアントアプリケーションです。クライアントとデータベース間の通信は、プロパティとしてエンティティオブジェクトを含むデータ転送オブジェクトを使用して実現されます。

とても簡単ですね。これがキャッチです。マップされた各クラスにはIDプロパティ自体が含まれているため、このようにオーバーライドすることにしました。

除算のラッパーも非常に簡単です。

マップされたクラスとそのBaseObjectクラスのID値を同じに保つ限り(これはあまり良いアプローチではありませんが、それでも)、かなりうまく機能しましたが、その後、次のようになりました。

メモリ内クエリを列挙しようとすると、次の例外が発生しました。クラスメンバーBaseObject.IDがマップされていません。タイプを記述し、IDプロパティをオーバーライドしていますが、L2Sは機能しません。助言がありますか?

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

c++ - C++基本クラスメソッドを自動的に呼び出す

コマンドデザインパターンを実装しようとしていますが、概念的な問題に遭遇しています。次の例のように、基本クラスといくつかのサブクラスがあるとします。

つまり、SomeCommandインスタンスで演算子()が呼び出されるたびに、コマンドのregisterメソッドを呼び出して* thisをスタックに追加したいと思います(主に元に戻す目的で)。SomeCommand :: operator()()から「register」を呼び出さないようにしたいのですが、自動的に呼び出されるようにします(どういうわけか;-))

SomeCommandなどのサブクラスを作成すると、基本クラスのコンストラクターが自動的に呼び出されるので、そこに「登録」の呼び出しを追加できることを知っています。operator()()が呼び出されるまでregisterを呼び出したくないもの。

これどうやってするの?私のデザインには多少の欠陥があると思いますが、これを機能させる方法がよくわかりません。

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

c++ - 誤ったプライベート基本クラスにアクセスできませんか?

g++ 4.2.1 を使用してこのコードをコンパイルします。

私は得る:

ただし、wrap_rep使用するクラスを変更するとST:

それはうまくコンパイルされます。または、元のコードを次のように変更すると:

また、正常にコンパイルされます。私には、元のコードはそのままで問題ないようです。これは g++ のバグですか? そうでない場合、なぜテンプレートの使用が機能するのでしょうか? そして、他のケースでは、なぜ::S必要なのですか?

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

oop - 派生クラスには必ずコンストラクターが必要ですか?

私の問題はこのようなものです。XMLUtility クラスがあります

そして

このクラスは、非常に基本的な xml 設定ファイルの機能を提供します。

そのため、もう少し高度な設定の処理が必要です。そこで、別のクラスを作成し、XMLUtility クラスから派生させました。

したがって、私の最初の考えは、基本クラスのコンストラクターを呼び出すため、このクラスのコンストラクターは必要ないということでした。しかし、私は間違っていました。

私の質問は、上記のコードが正しいかどうかです。このコンストラクター内にもチェックプロセス全体を記述する必要がありますか、それとも基本クラスのコンストラクターによって処理されますか? 空のコードブロックだけが正しいですか?

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

c# - 複数の型を持つことができる変数をどのように操作しますか?

以下を使用して、オブジェクトを親にリンクすることがよくあります。

さまざまなオブジェクト タイプの子になることができるオブジェクトがある場合があります。

より良い方法はありますか?異なる型のインスタンスになる可能性のある変数を操作するにはどうすればよいですか?

編集:もちろん、ビデオとオーディオが同じ基本クラス (メディアなど) から継承する場合、次のようにすることができます。

しかし、親が同じ基底クラスを継承していない場合はどうなるでしょうか?

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

c++ - C++テンプレートのダックタイピングと純粋な仮想基本クラスの継承

テンプレートのダックタイピングと純粋な仮想基本クラスの継承のどちらかを選択するためのガイドラインはどれですか?例:

0 投票する
9 に答える
48015 参照

python - 基本クラスを派生クラスpython(またはクラスを拡張するよりpythonicな方法)にキャストします

Networkx pythonパッケージを拡張しGraph、特定のニーズに合わせてクラスにいくつかのメソッドを追加する必要があります

これを行うことについて私が考えた方法は、単に新しいクラスsayNewGraphを派生させ、必要なメソッドを追加することです。

Graphただし、networkxには、オブジェクトを作成して返す(たとえば、ランダムグラフを生成する)他の関数がいくつかあります。新しいメソッドを使用できるように、これらのGraphオブジェクトをオブジェクトに変換する必要があります。NewGraph

これを行うための最良の方法は何ですか?それとも、まったく別の方法で問題に取り組む必要がありますか?