問題タブ [inheritance]

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

.net - ジェネリック インターフェイスを使用した .NET 継承

こんにちは、私は現在、キャッスル プロジェクトの ActiveRecord とリモーティング機能をいじっています。

私の現在の問題は、アドレス クラスで IBaseRepository から保存サブを実装する方法を見つける必要があることです。その方法がわかりません。

これが私の現在のコードです。VSは「IAddressを実装する」という行で、[Shared].IBaseRepository(Of [Shared].IAddress)にSub Save(obj As IAddress)を実装する必要があることを教えてくれます。

およびオンライン上 Public Overrides Sub Save(ByVal obj As Address) IBaseRepository(Of IAddress).Save を実装

[Shared].IBaseRepository(Of [Shared].IAddress) に Sub Save がないため、Save を実装できません。

私はそれを理解していません:(私を啓発してください。

ティア

0 投票する
14 に答える
160940 参照

java - 実行時に、基本クラスを拡張する Java アプリケーション内のすべてのクラスを検索します。

私はこのようなことをしたい:

そこで、アプリケーションの世界にあるすべてのクラスを調べて、Animal から派生したクラスを見つけたら、そのタイプの新しいオブジェクトを作成してリストに追加したいと考えています。これにより、リストを更新しなくても機能を追加できます。私は次のことを避けることができます:

上記のアプローチでは、Animal を拡張する新しいクラスを作成するだけで、自動的に取得されます。

更新: 2008 年 10 月 16 日午前 9:00 太平洋標準時:

この質問に対して多くの素晴らしい回答が寄せられました -- ありがとうございます。 回答と私の調査から、私が本当にやりたいことは Java では不可能であることがわかりました。機能する ddimitrov の ServiceLoader メカニズムなどのアプローチがありますが、それらは私が望むものに対して非常に重く、Java コードから外部構成ファイルに問題を移すだけだと思います。 2019 年 5 月 10 日更新(11 年後!) @IvanNik の回答 org.reflectionsによると、これに役立つライブラリがいくつかあります。@Luke Hutchisonの答えからのClassGraphも面白そうです。答えにはさらにいくつかの可能性があります。

私が望むことを述べるもう 1 つの方法: Animal クラスの静的関数は、Animal から継承するすべてのクラスを見つけてインスタンス化します。それ以上の構成やコーディングは必要ありません。構成する必要がある場合は、とにかく Animal クラスでそれらをインスタンス化することもできます。Java プログラムは .class ファイルの緩い連合にすぎないため、それがまさにその通りであることは理解しています。

興味深いことに、これはC# ではかなり些細なことのようです。

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

python - なぜ属性参照はPython継承でこのように動作するのですか?

以下は奇妙に思えます。基本的に、somedata属性はから継承したすべてのクラス間で共有されているようですthe_base_class

関数で定義self.somedataする__init__ことは明らかにこれを回避する正しい方法です(したがって、各クラスには独自のsomedatadictがあります)-しかし、そのような動作が望ましいのはいつですか?

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

c# - 継承された UserControl でロックされた DataGridView

いくつかの事前定義されたコントロール (groupbox、button、datagridview) を持つ UserControl があり、これらのコントロールは保護されているとマークされており、コンポーネント変数も保護されているとマークされています。

次に、この基本 UserControl から別の UserControl に継承したいと考えていますが、DataGridView は常にデザイナーでロックされています。

ISupportInitilize を実装する DataGridView と関係があるのではないかと思います。

DataGridView コントロール (など) が定義されています。


DataGridView コントロールがロックされています


継承後にデザイナーでこのコントロールを使用できるようにする方法はありますか?

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

.net - Entity Framework 継承型を保存できません

データ モデルに型ごとのテーブルの継承を実装しました (基本的BaseEntityに、アイテムのすべての基本情報を含むEmployer型と、アイテムから継承する型がありBaseEntityます)。すべてが正しく設定されているように見え、エンティティを使用すると (ADO.net Data Services または Linq to Entities を介して)、Employerタイプと問題がないように見えます。新しいEmployerエンティティを作成して保存しようとすると、問題が発生します。

.AddToEmployerアイテムのように見えないコンテキスト(およびAddObjectまたはのみAddToBaseEntity)。

使用するAddObject("Employer", NewEmployer)と、次のエラーメッセージが表示されます。

EntitySet 名 'DataEntities.Employer' が見つかりませんでした。

使用するAddToBaseEntity(NewEmployer)と、次のエラーメッセージが表示されます。

依存操作の有効な順序を判別できません。外部キーの制約、モデルの要件、またはストアによって生成された値が原因で、依存関係が存在する場合があります。

継承を設定する手順を見逃していませんか? 継承されたオブジェクトを保存する特定の方法はありますか? 私は何を間違っていますか?基本的な問題は、 が必要だということだとAddToEmployer思いますが、それを公開するにはどうすればよいですか? クライアント側で Employer タイプを確認でき、次のようなことができるため、オプションではないのは奇妙に思えます。

var NewEmployer = new Employer()- これは、Employer タイプが正常に表示されることを示唆しているようです。

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

python - Django では、Django の update_object ジェネリック ビューを使用して、継承されたモデルのフォームを編集するにはどうすればよいでしょうか?

Django では、動物が好きなアプリケーションからの抜粋を以下に示します。

以下の動物/models.py :

そしてanimal/urls.py :

一般的なビューを使用して、同じフォームを使用して犬や猫を編集するにはどうすればよいですか?

すなわち、 animals/animal_form.htmlに渡されるフォームオブジェクトはAnimal になるため、派生クラス Dog および Cat の詳細は含まれません。Django に子クラスのフォームをanimal/animals_form.htmlに自動的に渡すにはどうすればよいですか?

ちなみに、私はContentType の管理にDjangosnippets #1031を使用しているため、Animalには派生クラスを返すas_leaf_classという名前のメソッドがあります。

明らかに、派生クラスごとにフォームを作成することもできますが、それはかなりの不要な重複です (テンプレートはすべてジェネリックになるため、基本的には {{ form.as_p }})。

ちなみに、Animal はおそらく同じ問題を抱えたいくつかの無関係な基本クラスの 1 つであると想定するのが最善です。そのため、理想的な解決策はジェネリックです。

助けてくれてありがとう。

0 投票する
12 に答える
18570 参照

inheritance - オブジェクト指向のベスト プラクティス - 継承 v コンポジション v インターフェイス

単純なオブジェクト指向設計の問題にどのようにアプローチするかについて質問したいと思います。このシナリオに取り組む最善の方法について、私自身の考えがいくつかありますが、スタック オーバーフロー コミュニティから意見を聞くことに興味があります。関連するオンライン記事へのリンクも歓迎します。私は C# を使用していますが、質問は言語固有ではありません。

、、フィールドPersonを持つテーブルを持つデータベースのビデオ ストア アプリケーションを作成しているとします。また、 へのリンクを持つテーブルと、にもリンクするテーブルもあります。PersonIdNameDateOfBirthAddressStaffPersonIdCustomerPersonId

Customer単純なオブジェクト指向のアプローチは、a が"is a"であると言って、次のPersonようなクラスを作成することです。

これで、すべての顧客にメールを送信する関数を作成できます。

このシステムは、顧客とスタッフの両方である誰かがいるまでは問題なく機能します。everyoneリストに同じ人物が 2 回 (1 回は a として、1 回は a として)Customer含まれることを本当に望んでいないと仮定すると、次Staffのいずれかを任意に選択しますか?

明らかに、これら 2 つのうち最初のものだけがSendEmailToCustomers機能を壊すことはありません。

それで、あなたは何をしますか?

  • クラスにおよびクラスPersonへのオプションの参照を持たせますか?StaffDetailsCustomerDetails
  • Personに加えてオプションStaffDetailsCustomerDetails?を含む新しいクラスを作成します。
  • すべてをインターフェイス (例: IPersonIStaffICustomer) にして、適切なインターフェイスを実装する 3 つのクラスを作成しますか?
  • 別のまったく異なるアプローチをとりますか?
0 投票する
8 に答える
1109 参照

inheritance - リストをサブクラス化する必要がありますかまたはプロパティとして持っていますか?

私は、このシステムを構築してきたこの 2 か月の間に、この問題に頻繁に直面しました。シナリオは次のとおりです。本質的には他のオブジェクトのリストですが、その性質に固有の他のプロパティを持つこの種のオブジェクトがあります。例えば:

  • クラスTests:
    • 多くのTestオブジェクトが含まれています
    • プロパティがあります:
      • DefaultTimeouts
      • DefaultNumberOfTries

このクラスのサブクラスを作成List<Test>する必要がありますか、それとも から継承してObject、単にリストを他のフィールドの横にあるプロパティとして保持する必要がありますか?

これは少し主観的であり、個人的な好みがここで役割を果たす可能性があることは承知していますが、これについてのあなたの意見を心から知りたいです.

0 投票する
11 に答える
65435 参照

java - Javaで継承を禁止する正当な理由は?

Java で継承を禁止する正当な理由は何ですか?たとえば、最終クラスを使用するか、単一のプライベート パラメーターなしのコンストラクターを使用するクラスを使用することによりますか? メソッドを final にする正当な理由は何ですか?

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

c# - C#: myObj.ToString() の使用時にコンパイラ エラーを強制する

一連のプロパティを含むクラスがあります。その型のオブジェクトで ToString() を呼び出すのは、プログラマーの間違いです。このコード例を見てください:

ほとんどの人が ID を文字列として書き出す必要がある場合は、ID を返すように ToString を実装する必要があると考えることができます。ただし、プログラマーは「偶然」にコードを動作させるため、これは悪い習慣だと思います。私のクラスを使用するプログラマーは、必要なものを指定する必要があります。

代わりに、誰かが myObj.ToString() を呼び出して、コンパイル時エラーとして表示されるようにしたいのです。プライベートな ToString() 関数を作成することでそれができると思ったのですが、うまくいきません。

これを取り上げた理由は、ID ではなく完全修飾クラス名を含むクエリ文字列になってしまったためです。

質問は次のとおりです。クラスのオブジェクトで ToString() 関数を呼び出すとコンパイラ エラーが発生するように、ToString() 関数を「非表示」にする方法はありますか?