การห่อหุ้มหมายความว่าสถานะของวัตถุเกิดขึ้นผ่านอินเทอร์เฟซที่กำหนดไว้เท่านั้นและด้วยเหตุนี้คลาสจึงสามารถตรวจสอบให้แน่ใจว่าสถานะนี้ถูกต้องเสมอและสอดคล้องกับวัตถุประสงค์ของคลาส
ในบางกรณีจึงเป็นไปตามหลักการของการห่อหุ้มเพื่อเปิดเผยฟิลด์ต่อสาธารณะอย่างสมบูรณ์ - ค่าที่เป็นไปได้ทั้งหมดสำหรับฟิลด์นั้นใช้ได้กับค่าอื่น ๆ ที่เป็นไปได้ของฟิลด์อื่น ๆ ทั้งหมดดังนั้นโปรแกรมเมอร์จึงสามารถตัดสินใจที่จะอนุญาตฟิลด์ได้ สามารถจัดการได้อย่างอิสระโดยรหัสภายนอก
แม้ว่ากรณีเหล่านี้ส่วนใหญ่จะ จำกัด เฉพาะคลาสที่ส่วนใหญ่เป็น "ข้อมูลเก่าธรรมดา" พวกเขายังไม่น่าสนใจในเรื่องนี้มากพอเกี่ยวกับพวกเขา
ในอีกกรณีหนึ่งในภาษาอื่นจะมีเมธอด getter และ setter บางอย่างเช่นint getId()เพื่อรับค่าและvoid setId(int val)อัปเดต
คุณสมบัติช่วยให้เราใช้ไวยากรณ์เดียวกันในการอ่านและเขียนผ่านวิธีการเช่นเดียวกับที่เราใช้ในการอ่านและเขียนฟิลด์ นี่เป็นน้ำตาลสังเคราะห์ที่ดีแม้ว่าจะไม่สำคัญ
(อันที่จริงเนื่องจากวิธีการทำงานของการสะท้อนกลับและกรณีต่างๆเช่นDataBinder.Evalการมีคุณสมบัตินั้นมีประโยชน์แม้ว่าเขตข้อมูลจะทำงานได้ดี แต่นั่นก็เป็นอีกเรื่องหนึ่ง)
จนกว่าจะมีการแนะนำตัวตั้งค่าส่วนตัว (อันที่จริงสิ่งที่เปลี่ยนแปลงด้วย C # 2 คือไวยากรณ์สำหรับการมีตัวตั้งค่าส่วนตัวและตัวรับสาธารณะหรือที่ได้รับการป้องกันในบล็อกเดียวกัน) เราสามารถมีวิธีการส่วนตัวในการทำงานของตัวตั้งค่าส่วนตัว ตัวตั้งค่าส่วนตัวไม่จำเป็นจริงๆ แม้ว่าพวกเขาจะมีประโยชน์ดังนั้นในขณะที่เป็นเพียงแค่น้ำตาลที่เป็นประโยค แต่ก็มีประโยชน์มาก
การห่อหุ้มไม่ใช่เรื่องสำคัญว่าตัวตั้งค่า (หรือตัวรับ) ของคุณเป็นแบบสาธารณะส่วนตัวได้รับการคุ้มครองหรือภายใน แต่ขึ้นอยู่กับว่าเหมาะสมหรือไม่ เริ่มต้นด้วยการเริ่มต้นของทุกสาขาเป็นส่วนตัว (และสำหรับเรื่องที่readonly) แล้วในฐานะสมาชิกเพิ่มที่จำเป็น (ไม่ว่าคุณสมบัติหรือวิธีการ) ที่แก้ไขเขตข้อมูลเหล่านั้นและให้แน่ใจว่าวัตถุที่ยังคงถูกต้องตามที่พวกเขาเปลี่ยนแปลง สิ่งนี้ทำให้มั่นใจได้ว่าค่าคงที่ของคลาสจะถูกเก็บไว้ซึ่งหมายความว่ากฎที่อธิบายถึงชุดของสถานะที่ถูกต้องที่สามารถอยู่ได้นั้นจะไม่มีวันแตกหัก (ตัวสร้างยังช่วยโดยการตรวจสอบให้แน่ใจว่าเริ่มต้นในสถานะที่ถูกต้องเช่นนั้น)
สำหรับคำถามสุดท้ายของคุณการไม่เปลี่ยนรูปหมายความว่าคลาสนั้นไม่มีตัวตั้งค่าสาธารณะที่ได้รับการป้องกันหรือภายในและไม่มีวิธีสาธารณะที่ได้รับการป้องกันหรือภายในที่เปลี่ยนแปลงฟิลด์ มีองศานี้ใน C # มีสามองศาที่เป็นไปได้:
ฟิลด์อินสแตนซ์ของคลาสทั้งหมดเป็นreadonlyดังนั้นแม้แต่รหัสส่วนตัวก็ไม่สามารถแก้ไขได้ รับประกันว่าจะไม่เปลี่ยนรูป (สิ่งใดก็ตามที่พยายามเปลี่ยนแปลงจะไม่รวบรวม) และการเพิ่มประสิทธิภาพอาจทำได้ที่ด้านหลังของสิ่งนี้
ชั้นเรียนไม่สามารถเปลี่ยนรูปได้จากภายนอกเนื่องจากไม่มีสมาชิกสาธารณะเปลี่ยนแปลงอะไร แต่ไม่รับประกันว่าreadonlyจะไม่เปลี่ยนจากภายใน
คลาสไม่เปลี่ยนรูปเมื่อเห็นจากภายนอกแม้ว่าสถานะบางอย่างจะเปลี่ยนเป็นรายละเอียดการนำไปใช้งาน เช่นเขตข้อมูลสามารถบันทึกได้และด้วยเหตุนี้ในขณะที่จากภายนอกความพยายามที่จะดึงมันออกมาเพียงแค่เรียกค่าเดียวกันครั้งแรกความพยายามดังกล่าวจะคำนวณตามความเป็นจริงแล้วจึงเก็บไว้เพื่อเรียกคืนในความพยายามครั้งต่อ ๆ ไป
private File settingsFile = null;if (settingsFile == null) { settingsFile = GetSettingsFile() };การรีแฟคโค้ดแบบนั้นทำให้บางครั้งฉันร้องไห้ :) เพียงเพราะคุณสามารถตั้งค่าสมาชิกก่อนตัวสร้างได้ไม่ได้หมายความว่าคุณควรมีตัวสร้างหลายตัวสิ่งนี้ทำให้ยากที่จะทำตามตรรกะ ตัวตั้งค่าส่วนตัวบังคับให้คุณกำหนดค่าภายในตัวสร้างหรือใหม่กว่า