创建常量、原子性的值类型
2009-03-26 08:22:16 来源:WEB开发网这里已经存在第一个问题:当我们声明一个类时,更多的是定义一系列相关的操作(或者叫行为、方法),当然类中也会包含字段和属性,但这些字段通常都是为类的方法所使用,而属性则常用于表示类的状态(比如StringBuilder的Length),类的能力(比如StringBuilder的 Capacity),方法进行的状态或者阶段。而定义一个结构时,我们通常仅仅是用它来保存数据,而不提供方法,或者是仅提供对其自身进行操作或者转换的方法,而非对其它类型提供服务的方法。
Address 不包含任何的方法,它仅仅是将Provice、City、Zip这样的三个数据组织起来成为一个独立的个体,所以最好将其声明为一个Struct而非是一个Class。(这里也有例外的情况:如果Address包含二十个或者更多的字段,则考虑将其声明为Class,因为Class在参数传递时是传引用,而Struct是传值。在数据较小的情况下,传值的效率更高一些;而在数据较大的时候,传引用占据更小的内存空间。)
所以我们首先可以将Address声明为一个Struct而非Class。
数据不一致的问题
我们接下来使用一下刚刚创建的Address类型:
Address a = new Address();
a.Province = "陕西";
a.City = "西安";
a.Zip = "710068";
Console.WriteLine(a.ToString()); // Province: 陕西, City: 西安, Zip: 710068
看上去是没有问题的,但是回想下类型的定义,在给Zip属性赋值时是有可能抛出异常的,所以我们还是把它放在一个Try Catch语句中,同时我们给Zip赋一个错误的值,看会发生什么:
try {
a.City = "青岛";
a.Zip = "12345"; // 这里触发异常
a.Province = "山东";
} catch {
}
Console.WriteLine(a.ToString());//Province: 陕西, City: 青岛, Zip: 710068
- ››创建SQL2005自动备份,定期删除的维护计划
- ››创建动态表单 javascript
- ››创建基于PPTP的站点到站点VPN连接:ISA2006系列之...
- ››创建基于L2TP的站点到站点的VPN连接:ISA2006系列...
- ››创建一个Twisted Reactor TCP服务器
- ››创建Windows Mobile上兼容性好的UI 程序
- ››创建android的Service
- ››创建远古部落环境与原住民角色
- ››创建并扩展Apache Wicket Web应用
- ››创建不在任务条中显示窗口按钮的应用
- ››创建 Android 文件系统(Root file system)
- ››创建 Android 系统步骤简介
更多精彩
赞助商链接