問題タブ [contravariance]
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.
ienumerable - 共/反変性? タプル> リストに満足していない
この署名でメソッドを呼び出すことができない理由に頭を悩ませることはできません。
そのように:
これは共変/反変に関係していると思いますが、それは単なる推測です。誰かが彼の賢さを共有できますか?
c# - C# 3.5 共分散の問題?
私は C# の共分散の問題について多くのことを聞いたり読んだりしてきましたが、いくつかの質問とシナリオを提示したかったので、この問題に関する混乱を解消できることを願っています。
これらの例では、以下が常に定義されていると想定してください。
私の最初の例:
これはうまくいくはずですよね?これを C# で数回テストしたところ、正常にコンパイルされ、正常に実行されました (最初の例のテストは、コンソールに情報を出力するポリモーフィック呼び出しがあったため、これよりもわずかに多くなりました)。
2 番目の例:
この 2 番目の例では、これはコンパイルされるべきではなく、.NET 4.0 で解決されている共分散の問題の原因であると私は理解しています。間違っている場合は修正してください。また、.NET 4.0 では具体的な型間の共変性/反変性が許可されておらず、インターフェイスのみが許可されていることも認識しています。
最後に、いくつかの定義を取得したいと思います。これら 3 つの用語の背後にある意味がよくわかりません。
- 共分散
- 反変性
- 不変(不変と同じ?)
最後の単語については、暗黙のルールを持つ変更を参照するために C++ でよく使用しました。たとえば、整数があり、1 から 10 の間の値しか持てない場合、「不変性」とは、1 から 10 の間の値しか持てないということです。私はこれを誤解している可能性があり、この定義は、この特定の説明のために C# に適切に変換されます。
編集
私の目標は、C# のジェネリック インターフェイスに関する共分散またはキャストの問題が何であるかを正確に理解することです。私が投稿した例は、問題がどこにあるのかについての私の理解です。すべての例が正常にコンパイル/機能する場合は、C# で最も一般的な共変性/反変性/キャストの問題を再現する例を提示してください。問題を特定して他の人に説明できるように、これを知る必要があります。
c# - C# で質問をキャストする
IList から継承するインターフェイスがあります。
IMyList
type の変数をtypeIList<Derived>
またはにキャストしたいのですがList<Derived>
、どちらか簡単または最も理にかなっています。これを行う最善の方法は何ですか?
私は.NET 3.5を使用していることに注意してください
java - 述語関数を使用してJavaでリストをフィルタリングするにはどうすればよいですか?
次のコードを検討してください。
コンパイルに失敗します:
"
filter(Collection<T>, CollectionUtil.Predicate<T>)
型のメソッドCollectionUtil
は引数に適用できません(List<ICondition>, CollectionUtil.Predicate<Object>)
"
ICondition
-固有の述語を定義すればすべて問題isNonNull()
ありませんが、それはばかげており、何が問題なのか、それを修正する方法がわかりません。
ここに私のユーティリティ関数があります:
で 2 番目の述語を使用できないのはなぜfilter()
ですか?
.net - .NET: 共分散と反分散
重複の可能性:
共分散と反分散の違い
共分散と反分散とは何か、そして両者の違いを理解しようとしています。私はこのリンクを見てきましたが、これまでのところ次のことを理解しています。
共分散は、派生メンバーを基本メンバーに割り当てるプロセスです。そのような:
私が上記で正しいかどうかさえわかりません...推測します。基本的に、この 2 つが何であるか、またそれらの違いを理解できるように、最も簡単な言葉で説明してくれる人を探しています。
これに関して同様の議論のトピックがあることも理解していますが、ほとんどの回答は私が探していた種類の説明ではありません.
c# - 単一の型パラメーターに対して共分散と反分散の両方をサポートする
重複の可能性:
同じ型引数に対する共変性と反変性
out
次のキーワードを使用して、ジェネリック型パラメーターを共変として宣言できます。
in
次のキーワードを使用して、ジェネリック型パラメーターを反変として宣言できます。
また、異なる型パラメーターに対して両方をサポートすることもできます。
では、単一の型パラメーターに対して両方をサポートできないのはなぜでしょうか?
c# - 一般的な共分散と反分散
コード スニペットを検討してください。
しかし、私が書くICollection<Object> obj2 = obj;
と、コンパイル時エラーが発生します。
System.Collections.Generic.IList<string>
タイプ ' ' を ' ' に暗黙的に変換することはできませんSystem.Collections.Generic.ICollection<object>
。
andと andList<T>
の両方を実装しているため、この動作はなぜですか?IEnumerable<T>
ICollection<T>
IList<T>
c# - 共変性/反変性は、共通のインターフェースを実装していない暗黙的に変換可能な型に適用されますか?
私は現在、C#の共変性と反変性について読んでいます。
すべての例には、変換可能なオブジェクトの詳細があり、インターフェイスの実装とは正確であるために異なります。
どこCircle : IShape
共変性:SomeType<Circle> as SomeType<IShape>
反変性:SomeType<IShape> as SomeType<Circle>
それぞれが他のタイプに変換するように書かれてTypeA
いるが、共通のインターフェースを実装していない場合でも、これらのタイプのジェネリックの変換を扱うときに共分散/反変性について話すのは正しいですか?それともこれは別の概念ですか?TypeB
implicit converter
c# - C++/cli で分散を委譲する
動作中の C# コードを C++/CLI に変換中ですが、コンパイルできない理由がわかりません。
私が受け取ったエラー:
void MyNamespace::Handler::DataChanged(System::Object ^,System::EventArgs ^)' : the specified function does not match the delegate type 'void (System::Object ^,System::Data::DataRowChangeEventArgs ^)'
c# - C#での共変性/反変性
私は次のように反変性/共分散を説明する本を持っています:
- デリゲートは、そのメソッドターゲットよりも具体的なパラメータタイプを持つことができます。これは反変性と呼ばれます
- デリゲートの戻りタイプは、そのターゲットメソッドの戻りタイプよりも具体的でない場合があります。これは共分散と呼ばれます
そして、これは一例です。
共変性/反変性を使うには、例のように使う必要があると思いましたが、と new
で同じ結果が得られるようです。(私はMonoでテストしました)。sa = ActionObject
o = RetrieveString
- それでは、なぜ作家は
new
共分散/反変性を説明するために使用するのですか? - 共分散/反変性のアイデアの背後にある理論は何ですか?それは単なる空想的な名前
object x = Everything inherit from object
ですか?この奇妙な名前はどこから来たのですか?それの使用法は何ですか?