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

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

5
<out T> vs <T> ใน Generics
อะไรคือความแตกต่างระหว่าง &lt;out T&gt;และ&lt;T&gt;คืออะไร? ตัวอย่างเช่น: public interface IExample&lt;out T&gt; { ... } เมื่อเทียบกับ public interface IExample&lt;T&gt; { ... }
189 c#  generics  covariance 

11
แปลงรายการ <DerivedClass> เป็น List <BaseClass>
ในขณะที่เราสามารถสืบทอดจากคลาสพื้นฐาน / อินเทอร์เฟซทำไมเราไม่ประกาศList&lt;&gt; โดยใช้คลาส / อินเทอร์เฟซเดียวกัน interface A { } class B : A { } class C : B { } class Test { static void Main(string[] args) { A a = new C(); // OK List&lt;A&gt; listOfA = new List&lt;C&gt;(); // compiler Error } } มีวิธีแก้ไขไหม?

9
ตัวอย่างความแปรปรวนร่วมและความแปรปรวนของโลกแห่งความจริง
ฉันมีปัญหาเล็กน้อยในการทำความเข้าใจว่าฉันจะใช้ความแปรปรวนร่วมและความแตกต่างในโลกแห่งความจริงได้อย่างไร จนถึงตอนนี้มีเพียงตัวอย่างเดียวที่ฉันเห็นเป็นตัวอย่างอาร์เรย์แบบเดิม object[] objectArray = new string[] { "string 1", "string 2" }; มันคงจะดีถ้าได้เห็นตัวอย่างที่อนุญาตให้ฉันใช้มันในระหว่างการพัฒนาของฉันถ้าฉันเห็นว่ามันถูกใช้ในที่อื่น
162 c#  c#-4.0  covariance 

8
เหตุใดอาร์เรย์ของโควาเรียนท์ แต่ยาสามัญมีค่าคงที่?
จาก Java ที่มีประสิทธิภาพโดย Joshua Bloch อาร์เรย์แตกต่างจากประเภททั่วไปในสองวิธีที่สำคัญ อาร์เรย์แรกเป็น covariant ยาสามัญมีค่าคงที่ Covariant นั้นหมายถึงว่าถ้า X เป็นชนิดย่อยของ Y ดังนั้น X [] ก็จะเป็นประเภทย่อยของ Y [] อาร์เรย์เป็น covariant เนื่องจากสตริงเป็นชนิดย่อยของ Object So String[] is subtype of Object[] ค่าคงที่นั้นหมายถึงโดยไม่คำนึงว่า X เป็นชนิดย่อยของ Y หรือไม่ List&lt;X&gt; will not be subType of List&lt;Y&gt;. คำถามของฉันคือทำไมการตัดสินใจที่จะทำให้อาร์เรย์ covariant ใน Java? มีการโพสต์ SO อื่น ๆ …

4
ทำไมความแปรปรวนร่วมและความแปรปรวนไม่สนับสนุนประเภทค่า
IEnumerable&lt;T&gt;เป็นตัวแปรร่วมแต่ไม่สนับสนุนประเภทค่าเพียงแค่ประเภทอ้างอิงเท่านั้น คอมไพล์รหัสด้านล่างเรียบง่ายสำเร็จแล้ว: IEnumerable&lt;string&gt; strList = new List&lt;string&gt;(); IEnumerable&lt;object&gt; objList = strList; แต่การเปลี่ยนจากstringเป็นintจะได้รับการรวบรวมข้อผิดพลาด: IEnumerable&lt;int&gt; intList = new List&lt;int&gt;(); IEnumerable&lt;object&gt; objList = intList; เหตุผลอธิบายไว้ในMSDN : ความแปรปรวนใช้กับประเภทอ้างอิงเท่านั้น หากคุณระบุประเภทค่าสำหรับพารามิเตอร์ประเภทตัวแปรพารามิเตอร์ประเภทนั้นจะไม่เปลี่ยนแปลงสำหรับชนิดที่สร้างขึ้นที่เกิดขึ้น ฉันค้นหาและพบว่าบางคำถามที่กล่าวถึงเหตุผลคือการชกมวยระหว่างประเภทค่าและประเภทการอ้างอิงมวยระหว่างชนิดของมูลค่าและประเภทของการอ้างอิงแต่มันยังไม่ชัดเจนในใจฉันมากนักว่าทำไมการชกมวยถึงเป็นเหตุผล? ใครช่วยกรุณาให้คำอธิบายที่เรียบง่ายและมีรายละเอียดว่าทำไมความแปรปรวนร่วมและความแตกต่างไม่สนับสนุนประเภทของค่าและการชกมวยมีผลต่อเรื่องนี้อย่างไร?

5
ความแตกต่างระหว่างความแปรปรวนร่วมและความแปรปรวน
Наэтотвопросестьответына กองมากเกินнарусском : Ковариантностьиконтрвариантностьобобщений ฉันมีปัญหาในการทำความเข้าใจความแตกต่างระหว่างความแปรปรวนร่วมและความแตกต่าง

4
เพราะเหตุใดตัวอย่างจึงไม่ได้รับการรวบรวมความแปรปรวน (ร่วมต้านและและ) จึงทำงานได้อย่างไร
การติดตามจากคำถามนี้มีใครช่วยอธิบายสิ่งต่อไปนี้ในสกาลา: class Slot[+T] (var some: T) { // DOES NOT COMPILE // "COVARIANT parameter in CONTRAVARIANT position" } ฉันเข้าใจความแตกต่างระหว่าง+TและTในการประกาศประเภท (มันรวบรวมถ้าฉันใช้T) แต่แล้วเราจะเขียนคลาสที่ covariant ในพารามิเตอร์ประเภทของมันโดยไม่ต้องใช้วิธีการสร้างสิ่งที่ไม่มีใครเทียบได้อย่างไร ฉันสามารถมั่นใจได้ว่าต่อไปนี้เท่านั้นที่สามารถสร้างขึ้นด้วยตัวอย่างของT? class Slot[+T] (var some: Object){ def get() = { some.asInstanceOf[T] } } แก้ไข - ตอนนี้ลงไปที่ต่อไปนี้: abstract class _Slot[+T, V &lt;: T] (var some: V) { def …

7
การแปลงอาเรย์แบบแปรผันร่วมจาก x เป็น y อาจทำให้เกิดข้อยกเว้นขณะทำงาน
ฉันมีprivate readonlyรายการLinkLabels ( IList&lt;LinkLabel&gt;) ในภายหลังฉันเพิ่มLinkLabels ในรายการนี้และเพิ่มป้ายกำกับเหล่านั้นลงในรายการFlowLayoutPanelต่อไปนี้: foreach(var s in strings) { _list.Add(new LinkLabel{Text=s}); } flPanel.Controls.AddRange(_list.ToArray()); แสดงให้เห็นว่า Resharper Co-variant array conversion from LinkLabel[] to Control[] can cause run-time exception on write operationฉันเตือน: โปรดช่วยฉันคิดออก: สิ่งนี้หมายความว่าอย่างไร นี่คือการควบคุมผู้ใช้และจะไม่สามารถเข้าถึงได้โดยวัตถุหลายรายการเพื่อตั้งค่าป้ายกำกับดังนั้นการเก็บรักษารหัสไว้จะไม่ส่งผลกระทบต่อมัน

2
ปัญหาในการทำความเข้าใจความแตกต่างของความแปรปรวนร่วมกับยาชื่อสามัญใน C #
ฉันไม่เข้าใจว่าทำไมโค้ด C # ต่อไปนี้ไม่คอมไพล์ อย่างที่คุณเห็นฉันมีวิธีการทั่วไปแบบคงที่ Something ที่มีIEnumerable&lt;T&gt;พารามิเตอร์ (และTถูก จำกัด ให้เป็นIAอินเทอร์เฟซ) และพารามิเตอร์นี้ไม่สามารถแปลงเป็นIEnumerable&lt;IA&gt;ไฟล์. มีคำอธิบายอย่างไร? (ฉันไม่ได้ค้นหาวิธีแก้ปัญหาเพียงเพื่อทำความเข้าใจว่าเหตุใดจึงไม่ได้ผล) public interface IA { } public interface IB : IA { } public class CIA : IA { } public class CIAD : CIA { } public class CIB : IB { } public class CIBD : …

3
Covariance, Invariance และ Contravariance อธิบายเป็นภาษาอังกฤษล้วน?
วันนี้ผมอ่านบทความเกี่ยวกับ Covariance, Contravariance (และ Invariance) ใน Java ฉันอ่านบทความ Wikipedia ภาษาอังกฤษและภาษาเยอรมันรวมถึงบล็อกโพสต์และบทความอื่น ๆ จาก IBM แต่ฉันยังสับสนเล็กน้อยว่ามันเกี่ยวกับอะไรกันแน่? บางคนบอกว่ามันเกี่ยวกับความสัมพันธ์ระหว่างประเภทและประเภทย่อยบางคนบอกว่ามันเกี่ยวกับการแปลงประเภทและบางคนบอกว่ามันใช้เพื่อตัดสินใจว่าเมธอดจะถูกลบล้างหรือโอเวอร์โหลด ดังนั้นฉันกำลังมองหาคำอธิบายง่ายๆเป็นภาษาอังกฤษธรรมดาที่แสดงให้ผู้เริ่มต้นเห็นว่า Covariance and Contravariance (และ Invariance) คืออะไร จุดบวกสำหรับตัวอย่างง่ายๆ

2
Generic Covariance & Contra-variance ดำเนินการอย่างไรใน C # 4.0
ฉันไม่ได้เข้าร่วม PDC 2008 แต่ฉันได้ยินข่าวมาว่า C # 4.0 ได้รับการประกาศเพื่อรองรับความแปรปรวนร่วมทั่วไปและความแปรปรวนตรงกันข้าม นั่นคือสามารถกำหนดให้List&lt;string&gt; List&lt;object&gt;เป็นไปได้อย่างไร? ในหนังสือC # in Depthของ Jon Skeet อธิบายว่าทำไม C # generics ไม่สนับสนุนความแปรปรวนร่วมและความแปรปรวนตรงกันข้าม ส่วนใหญ่เป็นการเขียนโค้ดที่ปลอดภัย ตอนนี้ C # 4.0 เปลี่ยนไปรองรับพวกเขาแล้ว มันจะนำมาซึ่งความสับสนวุ่นวาย? ใครทราบรายละเอียดเกี่ยวกับ C # 4.0 ช่วยให้คำอธิบายได้บ้าง?

3
ยกตัวอย่างฟังก์ชันที่แสดงให้เห็นถึงความแปรปรวนร่วมและความขัดแย้งในกรณีของการโอเวอร์โหลดและการแทนที่ใน Java? [ปิด]
ปิด . คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ขณะนี้ยังไม่ยอมรับคำตอบ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เน้นไปที่ปัญหาเดียวโดยแก้ไขโพสต์นี้เท่านั้น ปิดให้บริการใน5 ปีที่ผ่านมา ปรับปรุงคำถามนี้ โปรดแสดงตัวอย่างที่ดีสำหรับความแปรปรวนร่วมและความแตกต่างใน Java


3
เหตุใดชุดที่ไม่เปลี่ยนรูปของ Scala จึงไม่เหมือนกันในประเภทของมัน?
แก้ไข : เขียนคำถามนี้ใหม่ตามคำตอบเดิม scala.collection.immutable.Setชั้นไม่ได้ covariant ในพารามิเตอร์ชนิดของมัน ทำไมถึงเป็นแบบนี้? import scala.collection.immutable._ def foo(s: Set[CharSequence]): Unit = { println(s) } def bar(): Unit = { val s: Set[String] = Set("Hello", "World"); foo(s); //DOES NOT COMPILE, regardless of whether type is declared //explicitly in the val s declaration }

9
C # รองรับความแปรปรวนร่วมประเภทการส่งคืนหรือไม่?
ฉันกำลังทำงานกับ. NET framework และฉันต้องการสร้างหน้าที่กำหนดเองที่เว็บไซต์ของฉันใช้ทั้งหมด ปัญหาเกิดขึ้นเมื่อฉันพยายามเข้าถึงเพจจากตัวควบคุม ฉันต้องการให้สามารถส่งคืนเพจประเภทเฉพาะของฉันแทนเพจเริ่มต้นได้ มีวิธีใดบ้างที่จะทำเช่นนี้? public class MyPage : Page { // My own logic } public class MyControl : Control { public MyPage Page { get; set; } }
88 c#  covariance 

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.