VB.NET还是比较常用的,于是我研究了一下VB.NET属性,在这里拿出来和大家分享一下,希望对大家有用。很多人在对属性的认识上产生了一些混乱的概念。其实属性这个东西绝非人们想象的那么复杂。让我们回到最基础的概念层次上来讨论属性:所谓属性其实就是暴露了读/写接口的类的内部所包含的一块数据。按照这个定义,你可能会认为你能在类中声明一个公共变量然后把它称为一个属性。当然,这种假设也不是没有一点道理,不过,类的公共变量所对应的技术术语应该是field(域)。域和属性之间的关键差别在于接口的包含性质上。现在暂时不对这一差别做具体解释咱们先明白其语法用途即可,以下介绍VB.NET属性。
在VB6中,属性由Let、Get和Set程序来定义和操作。而在VB.NET中语法就变了。属性被组织为单个Property代码块,其中针对属性的写(Set)和读(Get)操作设置了子代码块。这一程序起到了类的私有变量之上的抽象层作用。大多数人习惯于采用类似公共变量的方式命名这些私有变量,在它们前面加上小写的前缀字母m或者加上下划线区分所关联的属性(m前缀是VB6中继承下来的,意思是:“模块级变量”)。举一个例子:
- Private _ContactName As String
- Public Property ContactName()
- Get
- Return _ContactName
- End Get
- Set(ByVal Value)
- _ContactName = Value
- End Set
- End Property
我给一个假定的类ContactName创建了一个属性。为了支持该属性,我需要在类里设置一个变量存储其实际值。ContactName私有变量就是完成这一功能的。只要我获取或者设置了该属性,我就等于间接地使用了该值。
那么,为什么这么做就比使用域更好一些呢?主要的原因是,如果采用域,那么就无法控制写到变量中的数据。比方说,有的人却偏偏要在整数域中置入字符串或者给只读域赋值。在采用属性的情况下,你可以在Set程序中增加逻辑来保证赋值的有效性。你甚至可以完全省略Set代码块把属性设置为只读。
VB.NET属性真奇妙
最后,.NET还向我们提供了就被称为属性的内容。如果某个类标记为属性,那么它就被赋予一些特别有意思的专门功能。比如以下的Serializable属性。
- <Serializable()>
- Public Class MyClass
- '该类可以串行化!
- End Class
把以上的类标记为属性之后,不论其处于什么状态我都可以获取其实例并写出磁盘。在一些任何时候,我就可以对该类去串行化,就好象它始终保存在内存中一样。.NET框架提供了大量的属性,你甚至可以自VB.NET创建属性。
【编辑推荐】