我們已經知道了對象的原子性和常量性這兩個概念,那麼接下來該如何去實施呢?對於原子性,我們 實施的辦法是添加一個構造函數,在這個構造函數中為對象的所有字段賦值。而為了實施常量性,我們不 允許在為對象賦值以後還能對對象狀態進行修改,所以我們將屬性中的set訪問器刪除掉,同時將字段聲 明為readonly:
public struct Address {
private readonly string province;
private readonly string city;
private readonly string zip;
public Address(string province, string city, string zip) {
this.city = city;
this.province = province;
this.zip = zip;
CheckZip(zip); // 驗證格式
}
public string Province {
get { return province; }
}
public string City {
get { return city; }
}
public string Zip {
get { return zip; }
}
// 其余略 ...
}
這樣,我們對Address對象的創建,將所有字段的賦值都在構造函數中作為一個整體來進行;而當我們 需要改變單個字段的值時,也需要重新創建對象再賦值。我們看下下面的測試:
Address a = new Address("陝西", "西安", "710068");
try {
a = new Address("青島", "山東", "22233");// 發生異常,對a重新賦值失敗,但狀態保 持一致
} catch {
}
Console.WriteLine(a.ToString()); // 輸出:Province: 陝西, City: 西安, Zip: 710068