创建常量、原子性的值类型
2009-03-26 08:22:16 来源:WEB开发网这样,我们对Address对象的创建,将所有字段的赋值都在构造函数中作为一个整体来进行;而当我们需要改变单个字段的值时,也需要重新创建对象再赋值。我们看下下面的测试:
Address a = new Address("陕西", "西安", "710068");
try {
a = new Address("青岛", "山东", "22233");// 发生异常,对a重新赋值失败,但状态保持一致
} catch {
}
Console.WriteLine(a.ToString()); // 输出:Province: 陕西, City: 西安, Zip: 710068
避免外部类型对类型内部的访问
上面的方法解决了数据不一致的问题,但是还漏掉了一点:当类型内部维护着一个引用类型字段,比如说数组。尽管我们将它声明为了readonly,类型外部还是可以对它进行访问(如果你不清楚值类型和引用类型的区别,请参考 C#类型基础)。现在我们修改Address 类,添加一个数组phones,存储电话号码:
private readonly string[] phones;
public Address(string province, string city, string zip, string[] phones) {
// 略...
this.phones = phones;
}
public string[] Phones {
get { return phones; }
}
我们接下来做个测试:
string[] phones = { "029-88401100", "029-88500321" };
Address a = new Address("陕西", "西安", "710068", phones);
Console.WriteLine(a.Phones[0]); // 输出: 029-88401100
string[] b = a.Phones;
b[0] = "029-XXXXXXXX"; // 通过b修改了 Address的内容
Console.WriteLine(a.Phones[0]); // 输出: 029-XXXXXXXX
- ››创建SQL2005自动备份,定期删除的维护计划
- ››创建动态表单 javascript
- ››创建基于PPTP的站点到站点VPN连接:ISA2006系列之...
- ››创建基于L2TP的站点到站点的VPN连接:ISA2006系列...
- ››创建一个Twisted Reactor TCP服务器
- ››创建Windows Mobile上兼容性好的UI 程序
- ››创建android的Service
- ››创建远古部落环境与原住民角色
- ››创建并扩展Apache Wicket Web应用
- ››创建不在任务条中显示窗口按钮的应用
- ››创建 Android 文件系统(Root file system)
- ››创建 Android 系统步骤简介
更多精彩
赞助商链接