基於《Effective C#》第 7 項:建立具備常數性與原子性的值型別。
設計郵遞地址型別 Address,包含 Province、City、Zip(需驗證 6 位數字)。
public class Address {
private string _province, _city, _zip;
public string Province { get => _province; set => _province = value; }
public string City { get => _city; set => _city = value; }
public string Zip {
get => _zip;
set { CheckZip(value); _zip = value; }
}
private void CheckZip(string v) {
if (!Regex.IsMatch(v, @"^\d{6}$")) throw new Exception("Zip 格式錯誤");
}
public override string ToString() => $"{Province} {City} {Zip}";
}
struct(值型別)IEquatable<Address>、覆寫 Equals/GetHashCode下篇將展示完整的值型別實作。