Tôi muốn thực thi cấu trúc luôn hợp lệ về một hợp đồng nhất định, được thi hành bởi nhà xây dựng. Tuy nhiên, hợp đồng bị vi phạm bởi nhà điều hành default
.Làm cách nào để thực thi hợp đồng trong một cấu trúc
Hãy xem xét những điều sau đây, ví dụ:
struct NonNullInteger
{
private readonly int _value;
public int Value
{
get { return _value; }
}
public NonNullInteger(int value)
{
if (value == 0)
{
throw new ArgumentOutOfRangeException("value");
}
_value = value;
}
}
// Somewhere else:
var i = new NonNullInteger(0); // Will throw, contract respected
var j = default(NonNullInteger); // Will not throw, contract broken
Là một workaround tôi đã thay đổi cấu trúc của tôi đến một lớp học để tôi có thể đảm bảo các nhà xây dựng luôn được gọi khi khởi tạo một thể hiện mới. Nhưng tôi tự hỏi, liệu có hoàn toàn không có cách nào để có được hành vi tương tự với cấu trúc?
này thực sự là một giải pháp tốt để đáp ứng thư của hợp đồng, mặc dù nó cũng sẽ cần kiểm tra int.MinValue. Tôi sẽ không khuyên bạn nên tạo cấu trúc này, nhưng, nếu bạn thực sự muốn làm điều đó, đây có lẽ là giải pháp sạch nhất. –
+1 Bí quyết thông minh. Có thể khá khó khăn hơn cho các hợp đồng phức tạp hơn tuy nhiên. –