ฉันแปลกใจที่ดูเหมือนจะมีความเห็นตรงกันว่าการไม่เสมือนโดยปริยายเป็นวิธีที่ถูกต้องในการทำสิ่งต่างๆ ฉันจะลงมาอีกด้านหนึ่ง - ฉันคิดเชิงปฏิบัติ - ด้านข้างของรั้ว
เหตุผลส่วนใหญ่อ่านให้ฉันฟังเหมือนข้อโต้แย้ง "ถ้าเราให้พลังคุณอาจทำร้ายตัวเอง" จากโปรแกรมเมอร์?!
สำหรับฉันแล้วดูเหมือนว่า coder ที่ไม่รู้จักเพียงพอ (หรือมีเวลามากพอ) ในการออกแบบไลบรารีของพวกเขาสำหรับการสืบทอดและ / หรือความสามารถในการขยายคือ coder ที่สร้างไลบรารีอย่างแน่นอนฉันน่าจะต้องแก้ไขหรือปรับแต่ง - ไลบรารีที่ความสามารถในการลบล้างจะมีประโยชน์มากที่สุด
จำนวนครั้งที่ฉันต้องเขียนโค้ดที่น่าเกลียดและหมดหวัง (หรือละทิ้งการใช้งานและม้วนโซลูชันทางเลือกของฉันเอง) เพราะฉันไม่สามารถลบล้างได้ไกลเกินดุลจำนวนครั้งที่ฉันเคยถูกกัด ( เช่นใน Java) โดยการลบล้างจุดที่นักออกแบบอาจไม่ได้คิดว่าฉันทำได้
การไม่เสมือนโดยค่าเริ่มต้นทำให้ชีวิตของฉันยากขึ้น
UPDATE:มีการชี้ให้เห็น [ค่อนข้างถูกต้อง] ว่าฉันไม่ได้ตอบคำถามจริงๆ ดังนั้น - และขออภัยที่ค่อนข้างช้า ....
ฉันอยากจะเขียนอะไรบางอย่างที่มีเหตุผลเช่น "C # ใช้วิธีการแบบไม่เสมือนโดยค่าเริ่มต้นเนื่องจากมีการตัดสินใจที่ไม่ถูกต้องซึ่งให้ความสำคัญกับโปรแกรมมากกว่าโปรแกรมเมอร์" (ฉันคิดว่าอาจมีเหตุผลบ้างตามคำตอบอื่น ๆ ของคำถามนี้เช่นประสิทธิภาพ (การเพิ่มประสิทธิภาพก่อนกำหนดใคร?) หรือการรับประกันพฤติกรรมของชั้นเรียน)
อย่างไรก็ตามฉันตระหนักดีว่าฉันแค่แสดงความคิดเห็นของฉันไม่ใช่คำตอบที่ชัดเจนที่ Stack Overflow ต้องการ แน่นอนฉันคิดว่าในระดับสูงสุดคำตอบที่ชัดเจน (แต่ไม่เป็นประโยชน์) คือ:
โดยค่าเริ่มต้นจะไม่เสมือนจริงเนื่องจากนักออกแบบภาษามีการตัดสินใจและนั่นคือสิ่งที่พวกเขาเลือก
ตอนนี้ฉันเดาเหตุผลที่แน่นอนที่พวกเขาตัดสินใจว่าเราจะไม่ .... โอ้รอ! บันทึกการสนทนา!
ดังนั้นดูเหมือนว่าคำตอบและความคิดเห็นที่นี่เกี่ยวกับอันตรายของการลบล้าง API และความจำเป็นในการออกแบบอย่างชัดเจนสำหรับการสืบทอดอยู่ในแนวทางที่ถูกต้อง แต่ทั้งหมดขาดแง่มุมที่สำคัญไปชั่วขณะ: ข้อกังวลหลักของ Anders คือการรักษาโดยนัยของคลาสหรือ API สัญญาข้ามรุ่น และฉันคิดว่าเขากังวลมากขึ้นเกี่ยวกับการอนุญาตให้แพลตฟอร์ม. Net / C # เปลี่ยนแปลงภายใต้รหัสแทนที่จะกังวลเกี่ยวกับการเปลี่ยนรหัสผู้ใช้ที่ด้านบนของแพลตฟอร์ม (และมุมมอง "เชิงปฏิบัติ" ของเขาตรงข้ามกับของฉันเพราะเขามองจากอีกด้านหนึ่ง)
(แต่เป็นไปได้ไหมที่พวกเขาเลือกเสมือนโดยค่าเริ่มต้นจากนั้นจึงเพิ่ม "ขั้นสุดท้าย" ผ่าน codebase บางทีมันอาจจะไม่เหมือนกันนัก .. และ Anders ฉลาดกว่าฉันอย่างชัดเจนดังนั้นฉันจะปล่อยให้มันโกหก)
this
อ้างอิงเป็นโมฆะ ดูที่นี่สำหรับข้อมูลเพิ่มเติม