คลาสภายในที่ไม่เปิดเผยตัวคืออะไร?

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

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

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

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

หนึ่งในการใช้งานที่เฉพาะเจาะจงมากขึ้นสำหรับคลาสภายในที่ไม่ระบุชื่อคือการป้องกันรหัส ภาษา OOP จำนวนมากมีกลไกที่เรียกว่าการสะท้อนกลับ Reflection อนุญาตให้โปรแกรมแยกคลาสอื่นและดูว่าตัวแปรสมาชิกและเมธอดคืออะไร แต่ไม่ใช่รหัส โดยการใช้คลาสภายในที่ไม่ระบุชื่อเนื้อหาของคลาสภายในจะได้รับการปกป้องจากการสะท้อนกลับและการทำงานภายในของคลาสที่มีขนาดใหญ่กว่านั้นสามารถซ่อนได้