在2010以前的版本中,如果要取得某个对象的属性,需要使用Get函数。同理,如果要设置某个对象的属性,则需要采用Set函数。虽然这些操作难度不是很大,但是在应用程序开发中需要频繁使用。为此累计起来的话,工作量就会增加许多。在2010中,对此有不小的改善。主要就在于采用了“自动实现属性”的特性。
一、自动实现属性的内涵
顾名思义,自动实现属性就是对属性实现自动化管理。简单的说,自动实现属性可以帮助开发人员快速指定某个对象的属性(一般指的是类),而不需要编写代码来对这个属性执行Get或者Set操作。不过需要注意的是,这并不意味着系统不再执行Get或则和Set操作。而是说,在为自动实现的属性编写代码的时候,系统自动关联了Get与Set过程。即不需要通过代码来实现,但是后台的话,系统仍然是自动通过调用Set和Get函数来实现的。这一点开发人员需要特别注意。
另外值得一提的是,VisualStudio2010除了会自动关联Set和Get过程之外,编译器还会自动创建一个私有的字段来存储这个属性的变量。这也就是说,可以在代码级别来管理这个属性。如可以代码文件的某一行中声明一个包含默认值的属性等等。这大大提高了“自动实现属性”的灵活性。
二、要预防支持字段的名字与其他对象发生冲突
在讲上面这部分内容的时候,笔者说过,编辑器还会自动创建一个私有的字段来存储这个“自动实现属性”的变量。那么这个自动创建的字段是如何命名的呢?通常情况下,在定义自动实现属性的过程中(以VB为例),系统会自动创建一个隐藏的私有字段来包含这个属性的值。这个字段也叫做“支持字段”。既然是字段,那么就需要有名字。这个名字是系统自动定义的。其定义的规则就是在自动实现的属性的名称前面加上下划线。如现在有一个字段名字为Name。而开发人员为这个字段声明了“自动实现属性”,此时编译器自动创建的支持字段的名字就是_Name。
这里注意,如果在这个项目中,已经存在这个迷宫女子的对象,如类成员的名字等等,那么就会产生命名冲突,从而导致编译无法通过。据笔者所知,有一些开发人员比较喜欢使用“-”这个符号。如对于一些测试的或者临时的类,喜欢用“_”下划线符号开头。如果各位读者也有这种习惯的话,那么在使用“自动实现属性”就需要特别注意这个命名冲突的问题。
三、支持字段的特征与访问
虽然自持字段是系统编译器自动创建的,并且是一个隐藏的字段,但是在有需要的情况下,开发人员仍然可以访问这个字段。为此对于这个字段的一些特征开发人员还需要有所了解,不然的话,就无法正常使用这个字段。
据笔者测试与了解,这个字段主要有以下几个特征。
一是访问权限与字段本身相独立,即这个支持字段的访问修饰符始终未Private。如以上面这个字段Name为例。也许Name这个字段本身采用的修饰符为Public。但是_Name这个支持字段的访问修饰符则为Private。也就是说,不管Name这个字段采用的修饰符到底是什么,其对应的自持字段的修饰符都为Private。这就限制了其访问的权限。通常情况下,这个修饰符不允许更改,也不建议更改。
二是在共享的设置上,两个字段采用相同的设置。如现Name这个字段,属性标记为Share,则这个字段对应的支持字段属性也是共享的。这与上面这个修饰符刚好相反。一般来说,这些默认的设置笔者不建议在后续进行更改。
三是需要注意,有可能开发人员在Name字段上设置了一些特殊的属性。如只读或者其他的一些特殊属性。但是需要注意的是,这些特殊属性的值并不能够自动传递到支持字段上。所以Name字段与其对应的支持字段仍然有不少的差别。在访问的时候需要注意这些差异。否则的话,就很可能到处碰壁。
那么该通过何种形式来访问这个支持字段呢?笔者建议的途径是通过代码来访问。即在代码中像访问呢其他字段一样(注意上面提到的一些限制)来访问支持字段。这种途径是首选。其次,还可以通过监视窗口等调试工具来访问。有不少开发人员平时可能喜欢使用Intellisentse来管理字段。不过需要注意的是,通常情况下,支持字段并不会显示在Intellisentse文字完成列表中。