คำถามติดแท็ก 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 : ความแปรปรวนใช้กับประเภทอ้างอิงเท่านั้น หากคุณระบุประเภทค่าสำหรับพารามิเตอร์ประเภทตัวแปรพารามิเตอร์ประเภทนั้นจะไม่เปลี่ยนแปลงสำหรับชนิดที่สร้างขึ้นที่เกิดขึ้น ฉันค้นหาและพบว่าบางคำถามที่กล่าวถึงเหตุผลคือการชกมวยระหว่างประเภทค่าและประเภทการอ้างอิงมวยระหว่างชนิดของมูลค่าและประเภทของการอ้างอิงแต่มันยังไม่ชัดเจนในใจฉันมากนักว่าทำไมการชกมวยถึงเป็นเหตุผล? ใครช่วยกรุณาให้คำอธิบายที่เรียบง่ายและมีรายละเอียดว่าทำไมความแปรปรวนร่วมและความแตกต่างไม่สนับสนุนประเภทของค่าและการชกมวยมีผลต่อเรื่องนี้อย่างไร?

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 <: T] (var some: V) { def …

2
ปัญหาในการทำความเข้าใจความแตกต่างของความแปรปรวนร่วมกับยาชื่อสามัญใน C #
ฉันไม่เข้าใจว่าทำไมโค้ด C # ต่อไปนี้ไม่คอมไพล์ อย่างที่คุณเห็นฉันมีวิธีการทั่วไปแบบคงที่ Something ที่มีIEnumerable<T>พารามิเตอร์ (และTถูก จำกัด ให้เป็นIAอินเทอร์เฟซ) และพารามิเตอร์นี้ไม่สามารถแปลงเป็นIEnumerable<IA>ไฟล์. มีคำอธิบายอย่างไร? (ฉันไม่ได้ค้นหาวิธีแก้ปัญหาเพียงเพื่อทำความเข้าใจว่าเหตุใดจึงไม่ได้ผล) 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<string> List<object>เป็นไปได้อย่างไร? ในหนังสือC # in Depthของ Jon Skeet อธิบายว่าทำไม C # generics ไม่สนับสนุนความแปรปรวนร่วมและความแปรปรวนตรงกันข้าม ส่วนใหญ่เป็นการเขียนโค้ดที่ปลอดภัย ตอนนี้ C # 4.0 เปลี่ยนไปรองรับพวกเขาแล้ว มันจะนำมาซึ่งความสับสนวุ่นวาย? ใครทราบรายละเอียดเกี่ยวกับ C # 4.0 ช่วยให้คำอธิบายได้บ้าง?

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

2
การทำความเข้าใจอินเทอร์เฟซ Covariant และ Contravariant ใน C #
ฉันเจอสิ่งเหล่านี้ในหนังสือเรียนที่ฉันอ่านเรื่อง C # แต่ฉันมีปัญหาในการทำความเข้าใจอาจเนื่องมาจากไม่มีบริบท มีคำอธิบายที่สั้นกระชับเกี่ยวกับสิ่งที่พวกเขาคืออะไรและสิ่งที่มีประโยชน์สำหรับที่นั่นหรือไม่? แก้ไขเพื่อความกระจ่าง: อินเตอร์เฟซ Covariant: interface IBibble<out T> . . อินเทอร์เฟซ Contravariant: interface IBibble<in T> . .
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.