ฉันมีนิสัยแปลก ๆ ... อย่างน้อยตามที่เพื่อนร่วมงานของฉัน เราทำงานร่วมกันในโครงการขนาดเล็กด้วยกัน วิธีที่ฉันเขียนคลาสคือ (ตัวอย่างง่าย ๆ ):
[Serializable()]
public class Foo
{
public Foo()
{ }
private Bar _bar;
public Bar Bar
{
get
{
if (_bar == null)
_bar = new Bar();
return _bar;
}
set { _bar = value; }
}
}
โดยพื้นฐานแล้วฉันจะเริ่มต้นเขตข้อมูลใด ๆ เมื่อมีการเรียกทะเยอทะยานและฟิลด์ยังคงเป็นโมฆะ ฉันคิดว่าสิ่งนี้จะช่วยลดการโอเวอร์โหลดโดยไม่เริ่มต้นคุณสมบัติใด ๆ ที่ไม่ได้ใช้งานได้ทุกที่
การทางพิเศษแห่งประเทศไทย: เหตุผลที่ฉันทำเช่นนี้ก็คือคลาสของฉันมีคุณสมบัติหลายอย่างที่ส่งคืนอินสแตนซ์ของคลาสอื่นซึ่งในทางกลับกันก็มีคุณสมบัติที่มีคลาสที่ยังมีมากขึ้นเรื่อย ๆ การเรียกนวกรรมิกสำหรับคลาสบนสุดจะเรียกคอนสตรัคเตอร์ทั้งหมดสำหรับคลาสเหล่านี้ทั้งหมดเมื่อไม่จำเป็นเสมอไป
มีการคัดค้านการปฏิบัตินี้นอกเหนือจากความชอบส่วนตัวหรือไม่?
UPDATE: ฉันได้พิจารณาความคิดเห็นที่แตกต่างมากมายที่เกี่ยวข้องกับคำถามนี้และฉันจะตอบคำถามของฉัน อย่างไรก็ตามตอนนี้ฉันเข้าใจแนวคิดนี้ได้ดีขึ้นมากและฉันสามารถตัดสินใจได้ว่าจะใช้เมื่อไรและเมื่อใด
จุดด้อย:
- หัวข้อความปลอดภัย
- ไม่ปฏิบัติตามคำขอ "setter" เมื่อค่าที่ส่งเป็นค่าว่าง
- Micro-การเพิ่มประสิทธิภาพ
- การจัดการข้อยกเว้นควรเกิดขึ้นในตัวสร้าง
- ต้องตรวจสอบรหัส null ในชั้นเรียน
ข้อดี:
- Micro-การเพิ่มประสิทธิภาพ
- คุณสมบัติไม่ส่งคืนค่าว่าง
- เลื่อนหรือหลีกเลี่ยงการโหลดวัตถุ "หนัก"
ข้อเสียส่วนใหญ่ไม่สามารถใช้ได้กับไลบรารีปัจจุบันของฉันอย่างไรก็ตามฉันจะต้องทดสอบเพื่อดูว่า
การปรับปรุงครั้งล่าสุด:
ตกลงฉันเปลี่ยนคำตอบ คำถามเดิมของฉันคือว่านี่เป็นนิสัยที่ดีหรือไม่ และตอนนี้ฉันมั่นใจแล้วว่ามันไม่ใช่ บางทีฉันอาจจะยังคงใช้มันในบางส่วนของรหัสปัจจุบันของฉัน แต่ไม่ได้โดยไม่มีเงื่อนไขและไม่แน่นอนตลอดเวลา ดังนั้นฉันจะสูญเสียนิสัยและคิดเกี่ยวกับมันก่อนที่จะใช้ ขอบคุณทุกคน!