ฉันมีชั้นเรียนสองreadonly int
สาขา พวกเขาถูกเปิดเผยเป็นคุณสมบัติ:
public class Thing
{
private readonly int _foo, _bar;
/// <summary> I AM IMMUTABLE. </summary>
public Thing(int foo, int bar)
{
_foo = foo;
_bar = bar;
}
public int Foo { get { return _foo; } set { } }
public int Bar { get { return _bar; } set { } }
}
อย่างไรก็ตามนั่นหมายความว่าต่อไปนี้เป็นรหัสทางกฎหมายที่สมบูรณ์แบบ:
Thing iThoughtThisWasMutable = new Thing(1, 42);
iThoughtThisWasMutable.Foo = 99; // <-- Poor, mistaken developer.
// He surely has bugs now. :-(
ข้อบกพร่องที่มาจากการสันนิษฐานว่าจะใช้งานได้แน่นอนจะร้ายกาจ แน่นอนว่านักพัฒนาที่เข้าใจผิดควรอ่านเอกสาร แต่นั่นไม่ได้เปลี่ยนความจริงที่ว่าไม่มีข้อผิดพลาดในการคอมไพล์หรือรันไทม์เตือนเขาเกี่ยวกับปัญหา
ควรเปลี่ยนThing
คลาสอย่างไรเพื่อให้ devs มีโอกาสทำผิดพลาดน้อยกว่า
โยนข้อยกเว้นหรือไม่ ใช้วิธี getter แทนคุณสมบัติหรือไม่
Interfaces
ดูเหมือนว่าจะพูดคุยเกี่ยวกับการเชื่อมต่อในขณะที่ทุนฉัน ฉันไม่แน่ใจว่าเป็นสิ่งที่ฉันทำ