問題タブ [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.
c# - 異なる型パラメータ間の変換が許可されないのはなぜですか?
ある汎用コンテナを別のコンテナに変換すると非常に便利なので、わかりませんか?
c# - 継承でジェネリック クラスを作成する方法は?
次のコードを機能させるにはどうすればよいですか? C# のジェネリックをよく理解していないと思います。おそらく、誰かが私を正しい方向に向けることができます。
それはおそらく簡単な答えです。
更新: まず、これは C# 3.0 では不可能ですが、C# 4.0 では可能になります。
C# 3.0 で実行するには、これは 4.0 までの単なる回避策であり、次を使用します。
.net - .NET Framework 4.0 での型の相違
IEnumerable<T>
、IComparable<T>
およびさらにいくつかがタイプバリアントになりました。IList<T>
、ICollection<T>
および他の多くはそうではありません。なんで?
c# - C#:分散(共分散/反分散)はポリモーフィズムの別の言葉ですか?
私は単語の正確な意味を理解しようとしており、Covariance
オンラインContravariance
のいくつかの記事と StackOverflow に関する質問から、理解できることから、それはポリモーフィズムの別の単語にすぎません。
上記のステートメントで正しいですか?それとも間違っていますか?
java - プログラミング言語の共分散と逆分散の違いは何ですか?
プログラミング言語理論における共変性と反変性の概念を誰かが説明できますか?
c# - 非ジェネリック型の相互/反変性のサポート?
C# チームが非ジェネリックの共変/反変をサポートしないことにしたのはなぜでしょうか。チームメンバーが答えるとは思わないので、質問はかなり主観的ですが、誰かが私 (およびバーバラ・リスコフ) に欠けている洞察を持っているかもしれません。
このサンプル インターフェイスを見てみましょう。
次の実装は失敗しますが、完全に安全です (インターフェイスに違反することなく、より具体的な型をいつでも返すことができます - C# ではなく、少なくとも理論的には)。
インターフェイスにセッターが含まれている場合、コードは当然安全ではありませんが、ジェネリックの場合と同様に、 out/in を使用して安全性を宣言することで指摘できるため、実装全体を制限する理由にはなりません。
c# - C#で共変性と反変性を使用するIList、これは可能ですか?
これは可能でしょうか?(2010年とは違うので、自分で試すことはできません、ごめんなさい)
正しければ、これを使用して、同じインターフェースで共変性と反変性を実際に実装できます。
c# - ref パラメータが反変でないのはなぜですか?
これは機能します:
しかし、これはしません:
(エンドポイントのタイプに注意してください)
これは奇妙に思えます。ref キーワードがパラメーターの反変性を壊すのはなぜですか?
c# - 「何でも」のジェネリック コレクションを返すメソッドを宣言する方法 (C#)
抽象基本クラスから派生するジェネリック コレクション クラスの階層を使用して、抽象基本クラスからも派生するエンティティ項目を格納しています。
このモデルの目的は、CollectionBase<T> から派生したクラスのメンバーに厳密な型規則を適用し、これらのメンバーが既定のパブリック コンストラクターを持つことを保証することです。これまでのところ、動作します。
ここで、CollectionBase<T> から派生したクラスのインスタンスを返すファクトリ メソッドを作成したいと考えています。通常のアプローチは次のようになることを理解しています。
... または多分 ...
ただし、問題は、呼び出し元のルーチンが必要な "T" を認識していないことです。返す特定のタイプのコレクションを決定する必要があるのは、ファクトリ メソッド自体です。したがって、「戻り値の型は CollectionBase<T> から派生する」という非ジェネリック メソッド シグネチャが必要です。私はこのようなことを想定しています(合法であれば)...
これは厄介なジェネリック分散の問題の 1 つだと思いますが、この件に関する Eric Lippert の広範な説明を読んだ後でさえ、私がやろうとしていることが C# 4.0 で実行可能であるかどうか、および単純な方法があるかどうかはまだわかりません。 C# 3.0 での回避策。
あなたのアイデアを前もってありがとう。