問題タブ [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.
xml - IEnumerable と ICollection の XML シリアル化の防止継承される型(&)
注: XMLIgnoreは答えではありません。
OK、それでXML Serialization and Inherited Typesに関する私の質問に続いて、私はそのコードを私が取り組んでいるアプリケーションに統合し始めました.
IEnumerableとICollection<T>を実装するいくつかのクラスで問題が発生しました
これらの問題は、XMLSerializer がこれらをシリアライズしようとすると、それらを外部プロパティと見なし、使用したいプロパティ (つまり、AbstractXmlSerializerのプロパティ) を使用する代わりに、ここに来てフォールオーバーすることです (原因:型の不一致)、ほぼ振り出しに戻ります。これらのメソッドをXmlIgnore属性で装飾することもできないため、その方法で停止することはできません。
私の現在の解決策は、インターフェイスの実装を削除することです (この現在のアプリケーションでは、それは大したことではなく、コードをきれいにしただけです)。
これに対する私のプライドを飲み込み、それができないことを受け入れる必要がありますか? 私はちょっとプッシュして、XmlSerializer から予想以上のものを得たことを知っています:)
編集
また、追加する必要があります。現在、フレームワーク 2 で作業しています。
アップデート
lomaxx の回答を受け入れました。私のシナリオでは、実際にこれを行うことはできませんが、うまくいくことはわかっています。他に提案がなかったため、コードからインターフェイスの実装を削除することになりました。
c++ - C++ で保護された継承が必要な例はありますか?
プライベートな継承が必要なケースはまれに見ましたが、保護された継承が必要なケースに遭遇したことはありません。誰かに例がありますか?
c# - C# には非公開継承と保護継承の概念がありますか?
C# にはプライベート/保護された継承の概念がありますか?そうでない場合、その理由は?
C++
C#
.aspx ページに「サーブレットのような」概念を実装していますが、具象クラスが System.Web.UI.Page ベースの内部を参照できるようにしたくありません。
inheritance - クラス設計の決定
私には少しジレンマがあります。多分あなたは私を整理するのを手伝ってくれるでしょう。
私は今日、ASP.NETのメンバーシップを変更して、間接参照のレベルを追加することに取り組んでいます。基本的に、ASP.NETのメンバーシップはユーザーとロールをサポートし、すべての承認ルールはユーザーがロールに属しているかどうかに基づくようにします。
私がする必要があるのは、ユーザーが1つまたは複数のロールに属し、ロールに1つ以上の関数が関連付けられ、ユーザーが属しているかどうかに基づいて特定のアクションを承認できるようにする、関数の概念を追加することです。機能が割り当てられている役割に。
そうは言っても、私の問題はそれとは何の関係もありません。それはジェネリッククラスの設計の問題です。
基本のRoleProviderクラスに抽象メソッドを提供して関数を作成(および永続化)したいのですが、その関数の説明を保存することをオプションにしたいので、オーバーロードを使用してCreateFunctionメソッドを作成する必要があります。名前を受け入れる署名、および名前と説明を受け入れる他の署名。
私は次のシナリオを考えることができます:
抽象修飾子を使用して両方の署名を作成します。これには、実装者が、一方のオーバーロードがパラメータを正規化してもう一方を呼び出す必要があり、ロジックは最後の1つ(すべてのパラメータを含むもの)にのみ存在する必要があるというベストプラクティスを尊重しない可能性があるという問題があります。さらに、開発者が両方のメソッドを実装する必要があるのは良くありません。
最初のような仮想と2番目のような抽象を作成します。最初から2番目を呼び出し、実装者が動作をオーバーライドできるようにします。同じ問題があり、実装者はそれをオーバーライドするときに「悪い決定」をする可能性があります。
以前と同じですが、最初のオーバーライドを許可しないでください(仮想修飾子を削除してください)。ここでの問題は、実装者がメソッドがnull記述で呼び出される可能性があることを認識し、その状況を処理する必要があることです。
最良の選択肢は3番目の選択肢だと思います...
このシナリオは一般的にどのように処理されますか?抽象クラスを設計し、オーバーロードされたメソッドが含まれている場合。そんなに珍しいことではないと思います...
python - 既存のインスタンスからメソッドを単純に継承するにはどうすればよいですか?
以下に、私がやろうとしていることの非常に簡単な例を示します。HTMLDecorator を他のクラスで使用できるようにしたいと考えています。デコレータと呼ばれるという事実は無視してください。これは単なる名前です。
出力:
私がやろうとしていることは可能ですか?もしそうなら、私は何を間違っていますか?
java - @OneToMany が Hibernate の継承で機能しない理由
私がやろうとしていることはかなり明確だと思います。@ManyToOne の人が UglyProblem クラスに継承されることを期待しています。ただし、「UglyProblem クラス (mappedBy="person") にそのようなプロパティは見つかりません」というような例外が発生します。
私が見つけたのはこれだけです。この背後にある理由を説明する Emmanuel Bernard の投稿を見つけることができませんでした。
残念ながら、Hibernate のドキュメントによると、「 @MappedSuperclass としてマップされていないスーパークラスのプロパティは無視されます。」
これは、これら2つのクラスがある場合、次のことを意味すると思います。
その場合、フィールドfoo
はクラス B にマップされません。これは理にかなっています。しかし、私がこのようなものを持っている場合:
クラス UglyProblem にはフィールドがid
ありname
、両方のクラスが同じテーブルを使用してマップされることを期待しています。(実際、これはまさに起こっていることです。もう一度確認しました)。私はこのテーブルを持っています:
私の質問に戻ります:
@ManyToOne の人が UglyProblem クラスに継承されることを期待しています。
他のすべてのマップされたフィールドは継承されており、ManyToOne の関係に対してこの例外を作成する理由が見当たらないため、私はそれを期待しています。
ええ、私はそれを見ました。実際、私の場合は読み取り専用ソリューションを使用しました。しかし、私の質問は「なぜ...」でした:)。休止状態チームのメンバーによる説明があることを知っています。見つけられなかったので質問させていただきました。
このデザイン決定の動機を知りたいです。
(私がこの問題にどのように直面したかに興味がある場合:hibernate 3を使用して構築されたプロジェクトを継承しました。それはJboss 4.0.something + hibernateがすでにそこにありました(すべて一緒にダウンロードします)。私はこのプロジェクトをJboss 4.2に移動していました。 2 そして、「@OneToMany mappedBy」の継承されたマッピングがあり、古いセットアップで正常に機能することがわかりました...)
c# - なぜ継承は私が思うように機能しないのですか?
クライアント実装を作成するためにすべてを一緒にオーバーライドする必要がある相互に関連する抽象クラスのグループがあるため、いくつかの継承の問題が発生しています。理想的には、次のようなことをしたいと思います。
これにより、Dogクラスを使用するすべての人が自動的にDogLegsを取得し、Animalクラスを使用するすべての人がLegsを取得できるようになります。問題は、オーバーライドされた関数が基本クラスと同じ型である必要があるため、これがコンパイルされないことです。DogLegは暗黙的にLegにキャスト可能であるため、なぜそうすべきでないのかわかりません。これを回避する方法はたくさんあることは知っていますが、C#でこれが不可能/実装されていない理由についてはもっと興味があります。
編集:コードで関数の代わりにプロパティを実際に使用しているため、これを多少変更しました。
編集:答えはその状況にのみ適用されるため、関数に戻しました(プロパティの集合関数の値パラメーターの共分散は機能しないはずです)。変動してすみません!私はそれが多くの答えを無関係に見えるようにすることを理解しています。
language-agnostic - 継承よりも構成を優先しますか?
なぜ継承よりも構成を好むのですか?各アプローチにはどのようなトレードオフがありますか?いつ、構成よりも継承を選択する必要がありますか?
delphi - 明示的な呼び出しがない場合、Delphi 呼び出しはオーバーライドされたプロシージャで継承されますか
コードに明示的な呼び出しがない場合、つまり(継承された;)オーバーライドされたプロシージャで継承されたDelphi呼び出しはありますか、私は次の構造を持っています(スーパークラスからサブクラスへ)
TForm >> TBaseForm >> TAnyOtherForm
プロジェクト内のすべてのフォームは TBaseForm から派生します。これは、すべてのフォーム (セキュリティ、検証など) に使用されるすべての標準セットアップおよび破壊的な部分が含まれているためです。
TBaseForm には、これを行うためのコードを含む onCreate および onDestroy プロシージャがありますが、誰か (つまり私) が TAnyOtherForm の onCreate に継承を追加するのを忘れた場合、Delphi は私のためにそれを呼び出しますか? 必須ではないというウェブ上の参照を見つけましたが、コードから省略された場合に呼び出されるかどうかはどこにもありません。
また、継承を呼び出す場合、いつ呼び出されますか?
c++ - C++ 継承とメンバー関数ポインター
C++ では、メンバー関数ポインターを使用して、派生 (または基本) クラスのメンバーを指すことはできますか?
編集:おそらく例が役立ちます。継承順に
3 つのクラスX
、Y
、の階層があるとします。したがって、基本クラスと派生クラスがあります。Z
Y
X
Z
p
これで、 classのメンバ関数ポインタを定義できますY
。これは次のように書かれています。
(簡単にするために、署名付きの関数のみに関心があると仮定しますvoid f()
)
このポインターp
を使用して、 class のメンバー関数を指すことができるようになりましたY
。
この質問(実際には2つの質問)は次のとおりです。
p
派生クラスの関数を指すために使用できますZ
か?p
基本クラスの関数を指すために使用できますX
か?