关于.Net中属性的使用探讨(一)

关于.Net中属性的使用探讨(一)

codeprince http://[email protected] 


一. **VB.Net中的属性**


   在使用面向对象思想设计类的时候,尤其当使用.Net开发时,我们经常想对客户代码显示数据,而又同时保证在类中表示数据的封装性。


在这种情况下,属性是理想的解决方案。属性的行为如同类中的数据块。类的用户可以直接访问属性的名称。效果等价于这个类中真正地包


含一个具有这个名称的数据项。在具体地实现中,get属性过程获取属性值;set属性过程设置属性值。.Net Framework中的公共语言规范


(CLS)支持两种不同的属性:


● 标量属性


标量属性表示单个值。这个值可以是一个简单的值,如Char或String,或是较复杂的值,如DateTime等用户自定义的类型对象。


● 索引属性


索引属性表示值的集合。客户代码使用数组语法来访问集合里的值。


文章的后面将详细地讨论这两种属性。但要记住:属性是.Net Framework中的一个标准特征。这就意味着用任何与CLS兼容的语言开发的程


序代码都可以使用在VB.Net的类中定义的属性。


一个实际的例子:


下面显示了City类的一个简单的属性CityName。


   Class City


      private mCityName as String


      public Property CityName() as String


          Get


             return mCityName


          End Get


          Set(ByVal Value as String)


              mCityName=Value


           End Set


        End Property


    End Class


二. **标量属性**


**** 上面的一个例子显示的就是标量属性。在上面的例子中要注意以下几点:


   ⑴ City类有一个字段mCityName,它保存城市名,这个字段声名为Private(私有),来阻止客户代码的访问。面向对象开发的最重要的


      目的就是保持类的封装。换句话说:不要声名Public字段。


   ⑵ City类有一个属性CityName,用来获取和设置城市名。这个属性作为mCityName的包装器。CityName属性被声名为Public,这样它


      可以用在客户的代码中。大多数属性趋向于Public,因为属性本质上是为类提供一个方便的公有接口。不过也可能出现Private和


      Protected属性的情况。


   ⑶ 在定义CityName属性的时候,通过在Porperty语句的末尾附加语法As String来显示指定CityName的属性类型,这是一个良好的编程


      习惯;但是在实际的编程中(比如我)在输入完CityName()之后按下回车键,系统也将自动地添加一段Get和Set的语法段,但是系统就


      在Property语句的末尾将不附加As String。即如果你省略了返回类型,默认的返回类型是Object(这是系统的最基础的类,所有的


      Class(包括用户自定义的类)都要继承于Object)。Set属性过程需要用一个参数,来指定新的属性值。参数的类型必须和属性相同。该


      参数必须被定义为ByVal,这表示参数的值通过值传递而不是通过传引用的方式。


   ⑷ CityName属性在定义时被定义了Get和Set过程,但实际中有很多的属性(包括城市名)可能只是需要访问而不需要设置新的值,那么我们


      可以省略Set属性,并对Property使用ReadOnly关键字,就像下面显示的:


      Public ReadOnly Property CityName() as String


         Get


            return mCityName


          End Get


       End Property


      当然有时我们也可以使用WriteOnly关键字,那么这个属性就是可写的。但是只写属性在实际设计中相对较少。


   ⑸ 在定义属性的时候我们也要注意属性的命名方式(尽管这在设计过程中并不是最重要的),一个好的命名方式能够使你在设计过程中享受快


      乐,但定义属性的命名方式比区分大小写的语言(如C#等)要难的多,我个人喜欢为字段设置mXXX(如mCityName),将属性设置为XXX


      (如CityName),选择什么并不重要,根据个人的喜好而定。
Published At
Categories with Web编程
Tagged with
comments powered by Disqus