タグ付けされた質問 「contravariance」

4
共分散と反分散が値タイプをサポートしない理由
IEnumerable<T>あるコバリアントが、それは値型、ちょうどのみ参照型をサポートしていません。以下の単純なコードは正常にコンパイルされています。 IEnumerable<string> strList = new List<string>(); IEnumerable<object> objList = strList; しかし、からstringに変更するintと、コンパイルエラーが発生します。 IEnumerable<int> intList = new List<int>(); IEnumerable<object> objList = intList; その理由はMSDNで説明されています: 分散は参照型にのみ適用されます。バリアント型パラメーターに値の型を指定すると、その型パラメーターは、結果の構成型に対して不変になります。 私が検索したところ、値の型と参照の型の間のボクシングが原因であると述べたいくつかの質問が見つかりました。しかし、ボクシングが理由である理由はまだ私の心をはっきりさせませんか? 共分散と反変が値タイプをサポートしない理由と、ボクシングがこれにどのように影響するかについて、簡単で詳細な説明を誰かに教えてもらえますか?


4
(co-、contra-、in-)分散がどのように機能するのか、例ではコンパイルできないのはなぜですか?
この質問に続いて、誰かがScalaで次のことを説明できますか? class Slot[+T] (var some: T) { // DOES NOT COMPILE // "COVARIANT parameter in CONTRAVARIANT position" } 型宣言の+Tとの違いを理解してTいます(を使用するとコンパイルされますT)。しかし、その後どのように一つは、実際のものを作成するに頼ることなく、その型パラメータで共変であるクラス記述んunparametrizedを?以下がのインスタンスでのみ作成できることをどのように確認できますTか? class Slot[+T] (var some: Object){ def get() = { some.asInstanceOf[T] } } 編集 -これは次のようになりました: abstract class _Slot[+T, V <: T] (var some: V) { def getT() = { some } } …

2
C#でのジェネリックとの共分散反分散を理解する問題
次のC#コードがコンパイルされない理由を理解できません。 ご覧のとおり、静的なジェネリックメソッドSomething with a IEnumerable<T>parameter(and Tis constrained to an IAinterface)があり、このパラメーターは暗黙的に次のように変換できません。IEnumerable<IA>。 説明は何ですか?(回避策を探すのではなく、なぜそれが機能しないのかを理解するためです)。 public interface IA { } public interface IB : IA { } public class CIA : IA { } public class CIAD : CIA { } public class CIB : IB { } public class CIBD : CIB { …

3
共分散、不変性、反変性は平易な英語で説明されていますか?
今日、私はJavaの共分散、反変(および不変性)に関するいくつかの記事を読みました。私は英語とドイツ語のウィキペディアの記事、およびIBMからの他のいくつかのブログ投稿と記事を読みました。 しかし、私はまだこれらが正確に何であるかについて少し混乱していますか?型とサブタイプの関係に関するもの、型変換に関するもの、メソッドがオーバーライドされるかオーバーロードされるかを決定するために使用されると言う人もいます。 だから私は平易な英語で簡単な説明を探しています。それは初心者に共分散と反変(そして不変性)が何であるかを示しています。簡単な例としてプラスポイント。

2
ジェネリックな共分散と逆分散はC#4.0でどのように実装されますか?
PDC 2008には参加しませんでしたが、C#4.0がジェネリック共分散と逆分散をサポートするように発表されたというニュースを聞きました。つまり、List<string>に割り当てることができますList<object>。それはどうでしょうか? Jon Skeetの著書C#in Depthでは、C#ジェネリックが共分散と逆分散をサポートしない理由が説明されています。それは主に安全なコードを書くためのものです。現在、C#4.0はそれらをサポートするように変更されました。それは混乱をもたらすでしょうか? C#4.0の詳細を説明できる人はいますか?

3
Javaでオーバーロードとオーバーライドの両方のケースで共分散と反分散を示す関数の例を挙げてください。[閉まっている]
休業。この質問はもっと焦点を合わせる必要があります。現在、回答を受け付けていません。 この質問を改善してみませんか?質問を更新して、この投稿を編集するだけで1つの問題に焦点を当てます。 5年前に閉鎖。 この質問を改善する Javaの共分散と反分散の良い例を示してください。

2
C#の共変および反変インターフェースを理解する
C#で読んでいる教科書でこれらに出くわしましたが、おそらく文脈が不足しているために、理解するのに苦労しています。 それらが何であるか、そしてそれらがそこに何のために役立つかについての良い簡潔な説明はありますか? 明確にするために編集: 共変インターフェース: interface IBibble<out T> . . 反変インターフェース: interface IBibble<in T> . .
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.