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

共分散、反変、および不変性は、何らかの変換(ジェネリック内での使用など)を受けたときに既存の型継承階層がどのように変化するかを示します。変換が元の階層の順序を維持する場合、それは「共変」です。それを逆にすると、それは「反変」です。それを壊すなら、それは「不変」です。

14
C#で、List <string>オブジェクトをList <object>変数に格納できないのはなぜですか
ListオブジェクトをC#のList変数に格納することはできず、そのように明示的にキャストすることもできないようです。 List&lt;string&gt; sl = new List&lt;string&gt;(); List&lt;object&gt; ol; ol = sl; 結果は、型System.Collections.Generic.List&lt;string&gt;を暗黙的に変換できませんSystem.Collections.Generic.List&lt;object&gt; その後... List&lt;string&gt; sl = new List&lt;string&gt;(); List&lt;object&gt; ol; ol = (List&lt;object&gt;)sl; 結果はタイプSystem.Collections.Generic.List&lt;string&gt;をに変換できませんSystem.Collections.Generic.List&lt;object&gt; もちろん、文字列リストからすべてを引き出して一度に1つずつ戻すことでそれを行うことができますが、それはかなり複雑な解決策です。

9
C#はリターンタイプの共分散をサポートしていますか?
私は.NETFrameworkを使用していますが、すべてのWebサイトで使用するカスタムタイプのページを作成できるようにしたいと考えています。コントロールからページにアクセスしようとすると、問題が発生します。デフォルトのページではなく、特定の種類のページを返すことができるようにしたい。これを行う方法はありますか? public class MyPage : Page { // My own logic } public class MyControl : Control { public MyPage Page { get; set; } }
84 c#  covariance 

15
C#:戻り値の型のオーバーライド
C#で戻り値の型をオーバーライドする方法はありますか?もしそうなら、どのように、そしてそうでなければ、なぜそしてそれを行うための推奨される方法は何ですか? 私の場合は、抽象基本クラスとその子孫とのインターフェースがあります。私はこれをやりたいと思います(実際にはそうではありませんが、例として!): public interface Animal { Poo Excrement { get; } } public class AnimalBase { public virtual Poo Excrement { get { return new Poo(); } } } public class Dog { // No override, just return normal poo like normal animal } public class Cat { public override …

1
ValueTupleを共変にするものは何ですか?
これはC#7.3(フレームワーク4.8)で正しくコンパイルされます。 (string, string) s = ("a", "b"); (object, string) o = s; これは次の構文シュガーであることを知っています。これも正しくコンパイルされます。 ValueTuple&lt;string, string&gt; s = new ValueTuple&lt;string, string&gt;("a", "b"); ValueTuple&lt;object, string&gt; o = s; したがって、ValueTuplesを共変的に割り当てることができるようです。これはすばらしいことです。 残念ながら、その理由はわかりません。C#はインターフェイスとデリゲートの共分散しかサポートしていないという印象を受けました。ValueTypeどちらでもありません。 実際、自分のコードでこの機能を複製しようとすると、失敗します。 struct MyValueTuple&lt;A, B&gt; { public A Item1; public B Item2; public MyValueTuple(A item1, B item2) { Item1 = item1; Item2 = …

1
C#foreachの予期しない動作
なぜC#コンパイラはこれをコンパイルして実行時にランタイム例外をスローするのを許可するのですか? class Program { static void Main(string[] args) { IEnumerable&lt;Test&gt; list = new List&lt;Test&gt;() { new Test() }; foreach(IDisposable item in list) { } } } public class Test { } これは、任意のインターフェイスでコンパイルされ、IDisposableを具象クラスで置き換えてもコンパイルされません。
8 c#  covariance 
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.