問題タブ [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.

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

ienumerable - 共/反変性? タプル> リストに満足していない

この署名でメソッドを呼び出すことができない理由に頭を悩ませることはできません。

そのように:

これは共変/反変に関係していると思いますが、それは単なる推測です。誰かが彼の賢さを共有できますか?

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

c# - C# 3.5 共分散の問題?

私は C# の共分散の問題について多くのことを聞いたり読んだりしてきましたが、いくつかの質問とシナリオを提示したかったので、この問題に関する混乱を解消できることを願っています。

これらの例では、以下が常に定義されていると想定してください。

私の最初の例:

これはうまくいくはずですよね?これを C# で数回テストしたところ、正常にコンパイルされ、正常に実行されました (最初の例のテストは、コンソールに情報を出力するポリモーフィック呼び出しがあったため、これよりもわずかに多くなりました)。

2 番目の例:

この 2 番目の例では、これはコンパイルされるべきではなく、.NET 4.0 で解決されている共分散の問題の原因であると私は理解しています。間違っている場合は修正してください。また、.NET 4.0 では具体的な型間の共変性/反変性が許可されておらず、インターフェイスのみが許可されていることも認識しています。

最後に、いくつかの定義を取得したいと思います。これら 3 つの用語の背後にある意味がよくわかりません。

  • 共分散
  • 反変性
  • 不変(不変と同じ?)

最後の単語については、暗黙のルールを持つ変更を参照するために C++ でよく使用しました。たとえば、整数があり、1 から 10 の間の値しか持てない場合、「不変性」とは、1 から 10 の間の値しか持てないということです。私はこれを誤解している可能性があり、この定義は、この特定の説明のために C# に適切に変換されます。

編集

私の目標は、C# のジェネリック インターフェイスに関する共分散またはキャストの問題が何であるかを正確に理解することです。私が投稿した例は、問題がどこにあるのかについての私の理解です。すべての例が正常にコンパイル/機能する場合は、C# で最も一般的な共変性/反変性/キャストの問題を再現する例を提示してください。問題を特定して他の人に説明できるように、これを知る必要があります。

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

c# - C# で質問をキャストする

IList から継承するインターフェイスがあります。

IMyListtype の変数をtypeIList<Derived>またはにキャストしたいのですがList<Derived>、どちらか簡単または最も理にかなっています。これを行う最善の方法は何ですか?

私は.NET 3.5を使用していることに注意してください

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

java - 述語関数を使用してJavaでリストをフィルタリングするにはどうすればよいですか?

次のコードを検討してください。

コンパイルに失敗します:

"filter(Collection<T>, CollectionUtil.Predicate<T>)型のメソッドCollectionUtilは引数に適用できません(List<ICondition>, CollectionUtil.Predicate<Object>)"

ICondition-固有の述語を定義すればすべて問題isNonNull()ありませんが、それはばかげており、何が問題なのか、それを修正する方法がわかりません。

ここに私のユーティリティ関数があります:

で 2 番目の述語を使用できないのはなぜfilter()ですか?

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

.net - .NET: 共分散と反分散

重複の可能性:
共分散と反分散の違い

共分散と反分散とは何か、そして両者の違いを理解しようとしています。私はこのリンクを見てきましたが、これまでのところ次のことを理解しています。

共分散は、派生メンバーを基本メンバーに割り当てるプロセスです。そのような:

私が上記で正しいかどうかさえわかりません...推測します。基本的に、この 2 つが何であるか、またそれらの違いを理解できるように、最も簡単な言葉で説明してくれる人を探しています。

これに関して同様の議論のトピックがあることも理解していますが、ほとんどの回答は私が探していた種類の説明ではありません.

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

c# - 単一の型パラメーターに対して共分散と反分散の両方をサポートする

重複の可能性:
同じ型引数に対する共変性と反変性

out次のキーワードを使用して、ジェネリック型パラメーターを共変として宣言できます。

in次のキーワードを使用して、ジェネリック型パラメーターを反変として宣言できます。

また、異なる型パラメーターに対して両方をサポートすることもできます。

では、単一の型パラメーターに対して両方をサポートできないのはなぜでしょうか?

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

c# - 一般的な共分散と反分散

コード スニペットを検討してください。

しかし、私が書くICollection<Object> obj2 = obj;と、コンパイル時エラーが発生します。

System.Collections.Generic.IList<string>タイプ ' ' を ' ' に暗黙的に変換することはできませんSystem.Collections.Generic.ICollection<object>

andと andList<T>の両方を実装しているため、この動作はなぜですか?IEnumerable<T>ICollection<T>IList<T>

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

c# - 共変性/反変性は、共通のインターフェースを実装していない暗黙的に変換可能な型に適用されますか?

私は現在、C#の共変性と反変性について読んでいます。

すべての例には、変換可能なオブジェクトの詳細があり、インターフェイスの実装とは正確であるために異なります。

どこCircle : IShape

共変性:SomeType<Circle> as SomeType<IShape>
反変性:SomeType<IShape> as SomeType<Circle>


それぞれが他のタイプに変換するように書かれてTypeAいるが、共通のインターフェースを実装していない場合でも、これらのタイプのジェネリックの変換を扱うときに共分散/反変性について話すのは正しいですか?それともこれは別の概念ですか?TypeBimplicit converter

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

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 ^)'

0 投票する
4 に答える
3009 参照

c# - C#での共変性/反変性

私は次のように反変性/共分散を説明する本を持っています:

  • デリゲートは、そのメソッドターゲットよりも具体的なパラメータタイプを持つことができます。これは反変性と呼ばれます
  • デリゲートの戻りタイプは、そのターゲットメソッドの戻りタイプよりも具体的でない場合があります。これは共分散と呼ばれます

そして、これは一例です。

共変性/反変性を使うには、例のように使う必要があると思いましたが、と newで同じ結果が得られるようです。(私はMonoでテストしました)。sa = ActionObjecto = RetrieveString

  • それでは、なぜ作家はnew共分散/反変性を説明するために使用するのですか?
  • 共分散/反変性のアイデアの背後にある理論は何ですか?それは単なる空想的な名前object x = Everything inherit from objectですか?この奇妙な名前はどこから来たのですか?それの使用法は何ですか?