คำถามติดแท็ก covariance

ความแปรปรวนร่วมความแปรปรวนและความไม่แปรเปลี่ยนจะอธิบายว่าลำดับชั้นการถ่ายทอดทางพันธุกรรมที่มีอยู่เปลี่ยนแปลงไปอย่างไรเมื่ออยู่ภายใต้การเปลี่ยนแปลงบางอย่าง (เช่นการใช้งานภายในยาสามัญ) หากการเปลี่ยนแปลงยังคงเรียงลำดับตามลำดับชั้นเดิมนั่นคือ "ความแปรปรวนร่วม" ถ้ากลับกันแสดงว่า "ตรงกันข้าม" ถ้ามันแตกแสดงว่า "ไม่แปรผัน"

2
การทำความเข้าใจอินเทอร์เฟซ Covariant และ Contravariant ใน C #
ฉันเจอสิ่งเหล่านี้ในหนังสือเรียนที่ฉันอ่านเรื่อง C # แต่ฉันมีปัญหาในการทำความเข้าใจอาจเนื่องมาจากไม่มีบริบท มีคำอธิบายที่สั้นกระชับเกี่ยวกับสิ่งที่พวกเขาคืออะไรและสิ่งที่มีประโยชน์สำหรับที่นั่นหรือไม่? แก้ไขเพื่อความกระจ่าง: อินเตอร์เฟซ Covariant: interface IBibble<out T> . . อินเทอร์เฟซ Contravariant: interface IBibble<in T> . .

14
ใน C # ทำไมไม่สามารถเก็บวัตถุ List <string> ในตัวแปร List <object> ได้
ดูเหมือนว่าวัตถุ List ไม่สามารถเก็บไว้ในตัวแปร List ใน C # และไม่สามารถแคสต์อย่างชัดเจนด้วยวิธีนั้นได้ 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
ValueTuple covariant คืออะไร
สิ่งนี้รวบรวมได้อย่างถูกต้องใน C # 7.3 (Framework 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 สามารถกำหนดcovariantly , ซึ่งเป็นที่น่ากลัว ! น่าเสียดายที่ฉันไม่เข้าใจว่าทำไม : ฉันรู้สึกว่า C # รองรับความแปรปรวนร่วมบนอินเทอร์เฟซและผู้ได้รับมอบหมายเท่านั้น ValueTypeไม่ใช่ อันที่จริงแล้วเมื่อฉันพยายามทำซ้ำฟีเจอร์นี้ด้วยรหัสของฉันเองฉันล้มเหลว: struct MyValueTuple&lt;A, B&gt; { public …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.