โดยการเปรียบเทียบ C # นั้นเป็นเหมือนชุดเครื่องมือช่างของที่ใครบางคนได้อ่านว่าคุณควรหลีกเลี่ยงคีมและประแจที่ปรับได้ดังนั้นจึงไม่รวมประแจที่ปรับได้ทั้งหมดและคีมจะถูกล็อคไว้ในลิ้นชักพิเศษที่ไม่ปลอดภัย และสามารถใช้ได้กับการอนุมัติจากหัวหน้างานหลังจากลงนามในข้อจำกัดความรับผิดชอบที่จะทำให้นายจ้างของคุณรับผิดชอบต่อสุขภาพของคุณ
C ++ โดยการเปรียบเทียบไม่เพียงรวมถึงประแจและคีมที่ปรับได้ แต่เครื่องมือที่มีวัตถุประสงค์พิเศษบางอย่างที่แปลกประหลาดซึ่งมีจุดประสงค์ไม่ชัดเจนในทันทีและหากคุณไม่ทราบวิธีที่ถูกต้องในการจับพวกเขา นิ้วหัวแม่มือ (แต่เมื่อคุณเข้าใจวิธีใช้งานแล้วสามารถทำสิ่งต่าง ๆ ที่เป็นไปไม่ได้โดยใช้เครื่องมือพื้นฐานในกล่องเครื่องมือ C #) นอกจากนี้ยังมีเครื่องกลึงเครื่องกัดเครื่องบดพื้นผิวเลื่อยวงเดือนตัดโลหะ ฯลฯ เพื่อให้คุณสามารถออกแบบและสร้างเครื่องมือใหม่ ๆ ได้ทุกเมื่อที่คุณต้องการ (แต่ใช่เครื่องมือของช่างเครื่องเหล่านี้จะทำให้เกิด การบาดเจ็บสาหัสหากคุณไม่รู้ว่าคุณกำลังทำอะไรอยู่กับพวกเขา - หรือแม้ว่าคุณเพิ่งจะประมาท)
สิ่งนั้นสะท้อนถึงความแตกต่างพื้นฐานในปรัชญา: C ++ พยายามให้เครื่องมือทั้งหมดที่คุณอาจต้องการสำหรับการออกแบบที่คุณต้องการ มันแทบจะไม่พยายามควบคุมวิธีที่คุณใช้เครื่องมือเหล่านั้นดังนั้นมันจึงใช้งานง่ายในการสร้างงานออกแบบที่ทำงานได้ดีในสถานการณ์ที่หายากรวมถึงงานออกแบบที่อาจเป็นเพียงความคิดที่ไม่มีหมัดและไม่มีใครรู้ถึงสถานการณ์ที่ พวกเขามีแนวโน้มที่จะทำงานได้ดี โดยเฉพาะอย่างยิ่งข้อตกลงนี้ทำโดยการแยกการตัดสินใจออกแบบออกแม้กระทั่งในทางปฏิบัติจริง ๆ แล้วจะเชื่อมโยงกันเกือบตลอดเวลา เป็นผลให้มีความแตกต่างอย่างมากระหว่างเพียงแค่เขียน C ++ และเขียน C ++ ได้ดี ในการเขียนภาษาซีพลัสพลัสคุณจำเป็นต้องรู้สำนวนและกฎของหัวแม่มือมากมาย (รวมถึงกฎของหัวแม่มือเกี่ยวกับวิธีพิจารณาอย่างจริงจังก่อนที่จะทำลายกฎของหัวแม่มืออื่น ๆ ) ผลที่ตามมา, C ++ มุ่งเน้นไปที่การใช้งานง่าย (โดยผู้เชี่ยวชาญ) มากกว่าการเรียนรู้ที่ง่าย นอกจากนี้ยังมีสถานการณ์ (มากเกินไป) ซึ่งมันก็ไม่ได้ใช้งานง่ายนัก
C # จะมากขึ้นเพื่อพยายามที่จะมีผลบังคับใช้ (หรืออย่างน้อยมากขอแนะนำ) สิ่งที่นักออกแบบภาษาที่ถือว่าการออกแบบที่ดี มีบางสิ่งที่แยกออกมาในภาษา C ++ (แต่โดยทั่วไปแล้วในทางปฏิบัติ) จะเชื่อมต่อกันโดยตรงใน C # มันอนุญาตให้ใช้รหัส "ไม่ปลอดภัย" เพื่อผลักดันขอบเขตเล็กน้อย แต่โดยสุจริตไม่มาก
ผลที่ได้คือในมือข้างหนึ่งมีการออกแบบค่อนข้างน้อยที่สามารถแสดงออกได้โดยตรงใน C ++ ที่มีความชัดเจนในการแสดงออกใน C # ในทางกลับกันก็เป็นทั้งง่ายมากที่จะเรียนรู้ C # และมีโอกาสในการผลิตการออกแบบที่น่ากลัวจริงๆที่จะไม่ทำงานกับสถานการณ์ของคุณ (หรืออาจอื่น ๆ ) เป็นอย่างมากลดลง ในหลาย ๆ กรณี (อาจเป็นไปได้มากที่สุด) คุณสามารถออกแบบให้ใช้งานได้ง่ายเพียงแค่ "ไปตามกระแส" เพื่อพูด หรืออย่างหนึ่งในเพื่อนของฉัน (อย่างน้อยฉันก็ชอบคิดว่าเขาเป็นเพื่อน - ไม่แน่ใจว่าเขาเห็นด้วยหรือไม่) ชอบที่จะใส่ C # ทำให้มันง่ายที่จะตกอยู่ในหลุมแห่งความสำเร็จ
ดังนั้นเมื่อดูคำถามโดยเฉพาะเกี่ยวกับวิธีclass
และstruct
วิธีการใช้ภาษาทั้งสอง: วัตถุที่สร้างขึ้นในลำดับชั้นการสืบทอดที่คุณอาจใช้วัตถุของคลาสที่ได้รับมาในหน้ากากของคลาส / อินเทอร์เฟซพื้นฐานของคุณ ติดอยู่กับความจริงที่ว่าคุณต้องทำผ่านตัวชี้หรือการอ้างอิงในระดับที่เป็นรูปธรรมสิ่งที่เกิดขึ้นคือวัตถุของคลาสที่ได้รับมามีหน่วยความจำบางอย่างที่สามารถใช้เป็นตัวอย่างของคลาสพื้นฐาน / อินเตอร์เฟซและวัตถุที่ได้รับจะถูกจัดการผ่านที่อยู่ของหน่วยความจำส่วนนั้น
ใน C ++ มันขึ้นอยู่กับโปรแกรมเมอร์ที่จะทำอย่างถูกต้อง - เมื่อเขาใช้การสืบทอดมันขึ้นอยู่กับเขาเพื่อให้แน่ใจว่า (ตัวอย่าง) ฟังก์ชันที่ทำงานกับคลาส polymorphic ในลำดับชั้นทำได้โดยใช้ตัวชี้หรืออ้างอิงถึงฐาน ชั้น
ใน C # สิ่งที่เป็นพื้นฐานการแยกกันระหว่างประเภทที่ชัดเจนมากขึ้นและบังคับใช้โดยภาษาเอง โปรแกรมเมอร์ไม่จำเป็นต้องทำตามขั้นตอนใด ๆ ในการส่งอินสแตนซ์ของคลาสโดยการอ้างอิงเนื่องจากจะเกิดขึ้นตามค่าเริ่มต้น
struct
s จะไม่ถูกเก็บไว้ในกองเสมอ พิจารณาวัตถุที่มีstruct
เขตข้อมูล นอกเหนือจากนั้นขณะที่ Mason Wheeler พูดถึงปัญหาการแบ่งอาจเป็นเหตุผลที่ดีที่สุด