ความแตกต่างระหว่าง Abstract Class กับ Interface ใน C # ความแตกต่างระหว่าง

Anonim

คลาส abstract ดูเหมือนจะมีลักษณะเป็นส่วนติดต่อมาก แต่คอนเซ็ปต์นั้นค่อนข้างสับสนสำหรับผู้เริ่มต้นของ OOP Conceptually คลาสนามธรรมมีลักษณะเหมือนกับอินเทอร์เฟซแน่นอนไม่มีการใช้งาน แต่พวกเขามีส่วนแบ่งที่เท่าเทียมกันของความแตกต่าง ในขณะที่คลาสนามธรรมสามารถใช้งานได้ทั้งหมดหรือบางส่วนอินเตอร์เฟซต้องถูกนำมาใช้อย่างสมบูรณ์ ข้อแตกต่างที่สำคัญที่สุดระหว่างสองคือชั้นนามธรรมสามารถมีการใช้งานดีฟอลต์ในขณะที่อินเทอร์เฟซเป็นเพียงคำจำกัดความของวิธีการที่มีการประกาศสมาชิกเท่านั้น ลองหารือด้านทฤษฎีทั้งในรายละเอียด

บทคัดย่อคืออะไร?

คลาสนามธรรมเป็นคลาสพิเศษที่ทำหน้าที่เป็นฐานของชั้นเรียนอื่น ๆ และไม่สามารถสร้างขึ้นได้ ตรรกะการใช้งานของคลาสนามธรรมมาจากคลาสที่ได้รับ เพื่อให้เป็นนามธรรมแบบชั้นเรียนจะมีการใช้ "นามธรรม" การปรับเปลี่ยนซึ่งหมายความว่าการใช้งานที่ขาดหายไปบางอย่างต้องได้รับการดำเนินการในชั้นเรียนที่ได้รับมา มีสมาชิกทั้งนามธรรมและไม่เป็นนามธรรม คลาสนามธรรมมีวัตถุประสงค์เพื่อให้ฟังก์ชันพื้นฐานที่สามารถแชร์และแทนที่ด้วยชั้นเรียนที่ได้รับหลายรายการ เป็นประโยชน์ในการหลีกเลี่ยงการทำซ้ำรหัสใด ๆ มีลักษณะเป็นอินเทอร์เฟซมาก แต่มีฟังก์ชันเพิ่มเติม

อินเทอร์เฟซคืออะไร?

ส่วนติดต่อในทางกลับกันไม่ใช่คลาสที่มีเฉพาะลายเซ็นของฟังก์ชันการทำงาน เป็นรูปแบบที่ไม่มีการใช้งาน การพูดเชิงแนวคิดเป็นเพียงคำจำกัดความของวิธีการที่มีเพียงการประกาศสมาชิกเท่านั้น เป็นเปลือกที่ว่างเปล่าซึ่งไม่มีการใช้งานของสมาชิก เหมือนกับคลาสพื้นฐานนามธรรมที่มีเฉพาะสมาชิกเช่นวิธีการเหตุการณ์ indexers คุณสมบัติ ฯลฯ ไม่สามารถ instantiated โดยตรงและสมาชิกสามารถดำเนินการโดยชั้นใด นอกจากนี้อินเทอร์เฟซหลายแบบสามารถใช้งานได้โดยคลาส แต่คลาสสามารถสืบทอดชั้นเดียวได้

ความแตกต่างระหว่างคลาสบทคัดย่อและอินเทอร์เฟซใน C #

Multiple Inheritance

  1. - คลาสสามารถใช้คลาสนามธรรมได้เพียงกลุ่มเดียวดังนั้นจึงไม่สนับสนุนการสืบทอดหลาย ๆ อินเทอร์เฟซสามารถรองรับการสืบทอดได้หลายแบบซึ่งหมายความว่าคลาสสามารถสืบทอดมรดกได้จำนวนมาก ความหมาย
  2. จาก ระดับนามธรรมและอินเทอร์เฟซใน C # - คลาสนามธรรมเป็นคลาสพิเศษซึ่งอาจมีความหมายโดยไม่มีการใช้งาน ตรรกะการใช้งานมาจากคลาสที่ได้รับ อาจมีวิธีการแบบนามธรรมและไม่เป็นนามธรรมอินเตอร์เฟซในทางกลับกันเป็นเพียงรูปแบบที่ไม่สามารถทำอะไร เทคนิคมันเป็นเพียงเปลือกว่างเปล่า การดำเนินการ
  3. - คลาสนามธรรมสามารถมีทั้งความหมายและการใช้งานได้ เป็นคลาสที่ไม่สมบูรณ์ซึ่งไม่สามารถสร้างขึ้นได้ อินเทอร์เฟซสามารถมีลายเซ็นของฟังก์ชันการทำงานได้โดยไม่มีรหัสใด ๆ
  4. Access Modifiers - คลาสนามธรรมสามารถมีตัวปรับการเข้าถึงได้หลายแบบเช่น subs, functions, properties ฯลฯ ในขณะที่ interface ไม่ได้รับอนุญาตให้มีการปรับเปลี่ยนการเข้าใช้งานและวิธีการทั้งหมดจะต้องถูกกำหนดให้เป็น public โดยปริยาย ความสม่ำเสมอ
  5. - คลาสที่ใช้นามธรรมจะใช้สำหรับการใช้งานประเภทเดียวกันลักษณะการทำงานและสถานะในขณะที่อินเทอร์เฟซใช้สำหรับการใช้งานที่ใช้ร่วมกันเพียงลายเซ็น คำประกาศ
  6. - คลาสนามธรรมทำหน้าที่เป็นคลาสพื้นฐานสำหรับคลาสอื่น ๆ ทั้งหมดเพื่อที่จะสามารถประกาศหรือใช้ตัวแปรใดก็ได้ในขณะที่อินเทอร์เฟซไม่ได้รับอนุญาตให้ประกาศตัวแปรใด ๆ Constructor Declaration
  7. - ในขณะที่คลาสนามธรรมสามารถมีการประกาศคอนสตรัคเตอร์อินเทอร์เฟซไม่สามารถมีการประกาศคอนสตรัค Core vs. Peripheral
  8. - คลาสนามธรรมถูกใช้เพื่อกำหนดเอกลักษณ์หลักของคลาสและสามารถใช้สำหรับอ็อบเจ็กต์ของชนิดข้อมูลเดียวกันได้ อินเทอร์เฟซเป็นอีกทางหนึ่งที่ใช้ในการกำหนดความสามารถในการต่อพ่วงของคลาส Rigid vs. Supple
  9. - คลาสนามธรรมมีความนุ่มนวลในแง่ของฟังก์ชันการใช้งานอย่างน้อยจากมุมมองของนักพัฒนาซอฟต์แวร์ในขณะที่ส่วนติดต่อมีความเข้มงวดมากขึ้น คลาสบทคัดย่อและอินเทอร์เฟซ: แบบฟอร์มตาราง

คลาสนามธรรม

อินเทอร์เฟซ

คลาส abstract อาจมีการปรับเปลี่ยนการเข้าถึงทั้งหมดสำหรับการประกาศสมาชิกของฟังก์ชัน subs และ properties

อินเทอร์เฟซไม่ได้รับอนุญาตให้มีการปรับเปลี่ยนการเข้าถึงสำหรับการประกาศสมาชิกของฟังก์ชันย่อยคุณสมบัติ ฯลฯ สมาชิกทั้งหมดจะถือว่าเป็นสาธารณะโดยปริยาย คลาสสามารถใช้คลาสที่เป็นนามธรรมได้มากที่สุด
คลาสอาจสืบทอดจำนวนของอินเทอร์เฟซใด ๆ มรดกหลายรายการไม่ได้รับการสนับสนุนในชั้นนามธรรม
อินเทอร์เฟซอาจสนับสนุนการสืบทอดหลาย ๆ เทคนิคเป็นคลาสที่อาจมีหรือไม่มีคำจำกัดความและการใช้งาน
อินเทอร์เฟซสามารถมีลายเซ็นต์ของฟังก์ชันการทำงานได้ดังนั้นจึงเป็นส่วนที่ว่างเปล่า คลาสนามธรรมสามารถมีสมาชิกได้ consts, methods ที่กำหนดไว้และ stubs ของ method
อินเทอร์เฟซสามารถมีเฉพาะวิธีการและ consts เท่านั้น กำหนดอัตลักษณ์หลักของคลาสและใช้ในการอธิบายอ็อบเจ็กต์ของชนิดข้อมูลเดียวกัน
ใช้เพื่ออธิบายถึงความสามารถในการต่อพ่วงของชั้นเรียน สมาชิกของคลาสนามธรรมจะไม่สามารถเป็นแบบคงที่จนกว่าจะเป็นสมาชิกที่สมบูรณ์
สมาชิกของอินเทอร์เฟซไม่สามารถเป็นแบบสแตติก เหมาะสำหรับการใช้งานประเภทเดียวกันและพฤติกรรมทั่วไป
ใช้อินเทอร์เฟซที่ดีกว่าถ้ามีการใช้งานร่วมกันหลายรูปแบบร่วมกันเพียงลายเซ็น สามารถมีการประกาศ constructor
ไม่สามารถสร้างประกาศผู้สร้างได้ คลาสนามธรรมมีฟิลด์ที่กำหนดไว้ล่วงหน้าและ constrants
ฟิลด์ไม่สามารถกำหนดได้ในอินเทอร์เฟซ สามารถมีทั้งวิธีนามธรรมและไม่ใช่นามธรรม
สามารถมีวิธีการแบบ abstract เท่านั้น สรุป

ความแตกต่างระหว่างคลาสนามธรรมกับอินเทอร์เฟซคืออะไร? นี่อาจเป็นคำถามที่ถามบ่อยที่สุดในการสัมภาษณ์ด้านเทคนิค คุณมีแนวโน้มที่จะพบข้อมูลมากมายเกี่ยวกับชั้นเรียนนามธรรมและอินเทอร์เฟซในบทแนะนำ C # แต่การทำความเข้าใจความแตกต่างระหว่างสองส่วนนี้เป็นเรื่องที่ยากลำบาก คุณสามารถรวบรวมข้อมูลทั้งหมดที่คุณสามารถหาได้และยังไม่สามารถรับได้ ดี conceptually ทั้งสองเป็นเงื่อนไขที่สำคัญที่สุดในการเขียนโปรแกรมและค่อนข้างเดียวกัน แต่พวกเขาแตกต่างกันมากในแง่ของการทำงาน ในขณะที่คลาสนามธรรมเป็นคลาสพิเศษที่ทำหน้าที่เป็นฐานสำหรับชั้นเรียนอื่นอินเทอร์เฟซเป็นเพียงเชลล์เปล่าที่มีการประกาศสมาชิกเท่านั้น