問題タブ [covariance]
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.
java - プログラミング言語の共分散と逆分散の違いは何ですか?
プログラミング言語理論における共変性と反変性の概念を誰かが説明できますか?
c# - C#での継承-簡単な質問
複製
これが私のコードです:
SampleDerivedはSampleBaseから派生しています
継承ロジックによれば、これを実行できるはずです。ただし、コンパイルされません。エラーは、SampleBaseを暗黙的にSampleDerivedタイプに変換できないことを示しています。何が得られますか?
私はc#2.0を使用しています
c# - c# 2.0 (BindingList) でのジェネリックとの共分散の欠如に対する解決策
設計上の質問です。ビジネス オブジェクトと、そこから派生した 5 つのビジネス オブジェクト タイプがあります。
また、メンバーとして BindingList を持つクラスも作成します。そこから派生した5つのクラスがあります。
ここでは共分散が機能しないため、コードの繰り返しを最小限に抑えるために設計をどのように構成しますか? もちろん、BindingList をチャックして DataTable を使用することもできます。その場合、問題は解消されます。
しかし、誰もが BindingList を絶賛しているので、皆さんがこれにどのようにアプローチするかを知りたいです。
解決策(Pavel Minaevの回答に基づく):
java - Java共分散
私はこれを理解するのに苦労しています。次のコードがあるとします。
割り当てによってコンパイル エラーが発生するのはなぜですか? エラーは次のようなものです。
共分散に関する私の理解によれば、メソッドは常にオブジェクトを含むgetMammals()
a を返すため、割り当て可能である必要があります。私は何が欠けていますか?list
Mammal
c# - 一般的な制約にもかかわらず C# の型変換エラーが発生する
クラス P の型パラメーター T に「A から継承する必要がある」という一般的な制約がある場合、最初の呼び出しは成功するが、2 番目の呼び出しはコメントに詳述されている型変換エラーで失敗するのはなぜですか。
List<T>
一般的な制約は、それが実際にあることを保証するべきではありませんICollection<A>
か?
c# - 非ジェネリック型の相互/反変性のサポート?
C# チームが非ジェネリックの共変/反変をサポートしないことにしたのはなぜでしょうか。チームメンバーが答えるとは思わないので、質問はかなり主観的ですが、誰かが私 (およびバーバラ・リスコフ) に欠けている洞察を持っているかもしれません。
このサンプル インターフェイスを見てみましょう。
次の実装は失敗しますが、完全に安全です (インターフェイスに違反することなく、より具体的な型をいつでも返すことができます - C# ではなく、少なくとも理論的には)。
インターフェイスにセッターが含まれている場合、コードは当然安全ではありませんが、ジェネリックの場合と同様に、 out/in を使用して安全性を宣言することで指摘できるため、実装全体を制限する理由にはなりません。
c# - C#で共変性と反変性を使用するIList、これは可能ですか?
これは可能でしょうか?(2010年とは違うので、自分で試すことはできません、ごめんなさい)
正しければ、これを使用して、同じインターフェースで共変性と反変性を実際に実装できます。
c++ - 共分散を前方宣言する方法はありますか?
これらの抽象クラスがFoo
あり、Bar
:
ConcreteFoo
さらに、派生クラスとを持っていると仮定しConcreteBar
ます。foo()
とbar()
メソッドの戻り型を次のように共変的に改良したいと思います。
ConcreteBar
私たちの最愛のシングルパスコンパイラは、がから継承することを知らないため、これはコンパイルされません。Bar
したがって、これConcreteBar
は完全に合法的な共変リターン型です。プレーンフォワード宣言ConcreteBar
も、コンパイラに継承について何も通知しないため、機能しません。
これは私が一緒に暮らさなければならないC++の欠点ですか、それとも実際にこのジレンマを回避する方法がありますか?