問題タブ [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 投票する
2 に答える
568 参照

c# - 派生コントロールの作成

UserControlから継承し、その後、いくつかのクラスを派生させるために使用される抽象基本クラスがあります。

私が抱えている問題は、生成された関数InitializeComponent()がクラスの各レイヤーに対して呼び出されることをエレガントに保証する方法です。

したがって、(抽象) 基本クラスには、すべての子で共有される多数のコントロールがあります。InitializeComponent()子クラスのインスタンスを作成するとき、基本コンストラクターが最初に呼び出されますが、派生クラスごとに同じコンストラクターを効果的に構築することなく、派生をエレガントに呼び出す方法はありますか

各派生クラスで自分自身を繰り返すよりも効率的な方法があるかどうか疑問に思っていますか?

実際には、(抽象)基本クラスを呼び出せるようにしたい

結局のところ、基本コンストラクター (デバッグ中) にあるときは、それが派生インスタンスであることを認識しています...

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

linq - LinQ ORM データ オブジェクトと継承

これを行う方法を考えていますが、データベース、記事、NewsItems などにいくつかの異なる形のデータがあります。

それらにはすべて共通点があり、ID があります (DB では、ArticleID、NewsID などの名前が付けられています)。

彼らはすべてタイトルを持っています

それらはすべてBodyTextを持っています。

それらはすべてステータスを持っています

それらはすべてDateAddedを持っています

私がやりたいのは、標準クラスの継承です。

次のようなフィールドを持つコンテンツと呼ばれるマスター クラス (データベースにこれを書き込む必要はありません) が必要です。

  • ID
  • 題名
  • 字幕
  • 本文
  • 状態
  • 追加日

ORMでこれを行う方法がわかりません。これが必要な理由は、コンテンツのリストをレンダリングを担当する UserControl に渡すことができるからです。すべてのオブジェクトに共通の情報のみが必要です。

これは可能ですか?

0 投票する
6 に答える
523 参照

java - コンポジションの構文は、Java に追加するのに役立ちますか?

まず第一に、私は言語理論についてほとんど何も知りませんし、Java 以外の他の言語はほとんど知りませんが、私はクールだと思うアイデアを持っていまし

.言語 x が何年もの間それを持っていた
方法 c: 頭がおかしい
d: 上記のすべて

このアイデアは、構成にコードの再利用を同じように容易にextendsします。

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

そして、次のようなクラスがありました:

その後、これを行うことができます:

B のクラスに委任を追加する必要はありません。ただし、継承と同じこともできます。つまり、次のようになります。

欠点は次のとおりです。

  • メソッドはソース コードに隠されているため、呼び出し元がわかりにくくなっていますが、これは次の場合にも当てはまります。extends
  • 構成されたフィールドが同じメソッド シグネチャを共有する場合、競合を解決する必要があります (競合するインターフェイスはこれをどのように解決しますか?)
  • 同じタイプの複数の合成フィールドが必要な場合は、どのフィールドに委譲するかについて明らかな競合が発生します。
  • おそらく私が考えたことのない他の100のこと

私が言うように、私は明らかに言語理論家ではありませんし、それについて何年も考えたこともありません。アイデアが頭に浮かんだだけで、自分がどれほど間違っているかを知りたいと思いました. ちょっとクールだと思います。

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

c++ - 2 つの派生クラスからの多重継承

インターフェイスとして機能する抽象基本クラスがあります。

抽象クラスの半分を実装する派生クラスの 2 つの「セット」があります。(一方の「セット」は初期化に関連する抽象仮想メソッドを定義し、もう一方の「セット」は実際の「作業」に関連するメソッドを定義します。)

次に、複数の継承を使用して完全に定義されたクラスを構築する派生クラスを作成します (それ自体は何も追加しません)。

だから:(悪い疑似コード)

まず、これでいいの?同じ Base から派生した 2 つのクラスを継承できますか? (そうだといい)。

ただし、これが「本当の問題」です(例を単純化するために少し上に嘘をつきました)。

私が実際に行ったことは、非抽象アクセサー メソッドを基本クラスに追加することです。

一般的なイディオムは、すべての仮想メソッドを非公開にすることです。

残念ながら、現在、AbsInit と AbsWork の両方がこれらのメソッドを継承しているため、NotAbsTotal は「それぞれ 2 つ」を継承しています (コンパイル時に実際に起こっていることを解体している可能性があることに気付きました)。

とにかく、g ++は、クラスを使用しようとすると「メンバーinit()のリクエストがあいまいです」と不平を言います。

AbsBase クラスを純粋なインターフェイスとして使用していれば、これは回避できたと思います (上の例が有効であると仮定します)。

だから: - 私は私の実装から離れていますか?- これは、仮想メソッドを非公開にするイディオムの制限ですか? - コードをリファクタリングして、やりたいことを実行するにはどうすればよいですか? (1 つの共通インターフェースを提供しますが、メンバー関数の「セット」の実装を交換する方法を許可します)

編集:

私は最初のものではないようです: http://en.wikipedia.org/wiki/Diamond_problem

ここでは仮想継承が解決策のようです。以前に仮想継承について聞いたことがありますが、それについて頭を悩ませたことはありません。私はまだ提案を受け付けています。

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

oop - サブタイピング関係を作成せずに継承を作成する賢明な例はありますか?

私はOOPを教えていて、継承と2つのタイプ間のサブタイプ関係の作成の重要な違いを生徒に伝えようとしていました。たとえば、C ++では、プライベート継承を使用して、外部の誰にもサブタイピング関係が表示されないようにすることができます。

ただし、サブタイピング関係を作成したくない状況はたくさん考えられますが(たとえば、二重リンクリストクラスを介してスタックを実装するなど)、適切な設計例を思いつくことはできません。実際には、パブリックサブタイピング関係を作成せずに継承に従うことを選択します(たとえば、集約を使用するのではありません)。

良い例のアイデアはありますか?

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

c# - C# インターフェイスの実装関係は単なる「できる」関係ですか?

今日、C# でのインターフェイスの実装は、「Is-A」の関係ではなく、単なる「Can-Do」の関係であると誰かが私に言いました。これは、LSP (Liskov Substitution Principle) に対する私の長年の信念と矛盾します。私は常に、すべての継承は「Is-A」の関係であるべきだと考えています。

したがって、インターフェースの実装は単なる「できること」の関係です。「IHuman」と「IEngineer」というインターフェースがあり、「IHuman」と「IEngineer」を継承するクラス「Programmer」が1つあるとしたら?確かに、「プログラマー」は「IHuman」と「IEngineer」です。

単なる「Can-Do」関係であれば、IHuman として扱う場合と IEngineer として扱う場合で「Programmer」インスタンスの挙動が異なることは期待できないということでしょうか?

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

objective-c - 親イニシャライザを使用してオブジェクトを初期化 ( init ) した後にサブクラス メソッドにアクセスしようとすると、アプリがクラッシュする

NSMutableArray をサブクラス化するクラスがあります。

私はそれを使用して初期化します:

MyClass クラス = [MyClass arrayWithContentsOfFile:path];

サブクラス メソッドのいずれかにアクセスしようとすると、アプリが次のエラーでクラッシュします。

-[NSCFArray loadCards]: 認識されないセレクターがインスタンス 0x454a30 に送信されました * キャッチされない例外 'NSInvalidArgumentException' が原因でアプリを終了します。理由: '* -[NSCFArray > mymethod]: 認識されないセレクターがインスタンス 0x454a30 に送信されました app[32259:20b] 2524995915、

arrayWithContentsOfFile:path が「MyClass」ではなく NSArray を返すため、セレクターに応答できないため、これが発生すると思われます。

何か案は?

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

c# - 継承に関する質問 - Access データベース ファイルと SQL Express からデータを取得する

最初は Access データベースに接続するアプリケーションを開発しており、近い将来に MS SQL または SQL Express に切り替える予定です。データテーブル構造は両方のタイプのデータベースで同じであり、コードの重複を避け、コードを最小限に抑える方法を見つけようとしています。

たとえば、Access データベースからデータを取得するための次の関数を作成しました。

次のコードは SQL Express データベース用です。

この 2 つの方法はほとんど同じです。唯一の違いは、SqlCommand/OleDbCommand と SqlDataAdapter/OleDbDataAdapter です。たとえば、引数を取るメソッドもいくつかあります。

この場合、SQL クエリ文字列も両方のデータベースで同じですが、cmd のタイプ (SqlCommand/OleDbCommand) に違いがあります。

コードの重複を回避し、特定の問題を最適化する方法について誰かが提案してくれれば、本当に感謝しています。

0 投票する
6 に答える
19532 参照

perl - Perl で「use base」を使用してサブルーチンを継承するにはどうすればよいですか?

Perl で「ベースを使用」を適用して、ベース モジュールからサブを継承するにはどうすればよいですか?

私は C++ の継承メカニズムに慣れており、これについてグーグルで検索したすべてのサイトは、助けになるよりも混乱を引き起こしました。次のようなことをしたい:

.

Perl が文句を言います/tbSub が見つかりません。

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

vb.net - COM vb.net クラスの継承メンバーの公開

私は2つのvb.netクラスを持っています:

コンパイルされた DLL を VB6 で参照すると、Class2 は sProperty2 のみを公開します。基本クラス (sProperty1) の継承されたプロパティに COM 経由でアクセスするにはどうすればよいですか?