Tôi có một lớp học với hai readonly int
lĩnh vực. Chúng được phơi bày như là tài sản:
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 { } }
}
Tuy nhiên, điều đó có nghĩa là sau đây là mã hợp pháp hoàn hảo:
Thing iThoughtThisWasMutable = new Thing(1, 42);
iThoughtThisWasMutable.Foo = 99; // <-- Poor, mistaken developer.
// He surely has bugs now. :-(
Các lỗi xuất phát từ giả định rằng sẽ hoạt động chắc chắn là ngấm ngầm. Chắc chắn, nhà phát triển nhầm lẫn nên đọc tài liệu. Nhưng điều đó không thay đổi thực tế rằng không có lỗi biên dịch hoặc thời gian chạy nào cảnh báo anh ta về vấn đề này.
Làm thế nào để Thing
thay đổi lớp để các nhà phát triển ít có khả năng mắc lỗi ở trên?
Ném một ngoại lệ? Sử dụng một phương thức getter thay vì một tài sản?
Interfaces
. Tôi không chắc đó là những gì tôi đang làm.