只写属性
除了不同的关键字和只包含setter之外将属性设置为只写与只读的过程类似
Public WriteOnly Property ProductID() As Double
Set (ByVal value As Integer)
_productID = value
End Set
End Property
这里的关键字为WriteOnly在使用该定义时如果尝试读取该属性将会导致编译错误
属性与公有变量
在读取属性文本时您或许会惊奇为什么要使用它们为什么不只是将内部变量设置为公有?
Public Class CartItem
Private ProductID As Integer
Private ProductName As String
Private ProductImageUrl As String
Private Quantity As Integer
Private Price As Double
Private LineTotal As Double
End class
该代码可以正常工作但并不是个好方法因为它违背了面向对象的一个原则抽象(还有其他一些面向对象的原则但它们与这个特定的主题无关)这意味着您应该将功能抽象化因而要隐藏该类的内部工作方式之所以要这样处理是因为它允许您不必修改该类的使用方式就可以修改它的内部工作方式例如考虑LineTotal它是Quantity与Price的乘积必须使用某种方法计算这个总数而且如果使用Public变量那么将计算值保存在何处?它可以在构造函数中实现但是对于只是创建了一个空记录项的空构造函数该怎么办?您是让该类的用户计算总数或是提供一些其他功能来实现吗?这两种方法都不可取
抽象只是表示您提供了一个简单的有保障的方法来访问类的功能而且用户不需要知道该类如何工作您使用了一些属性来隐藏内部存储器那些私有变量都是内部存储器而属性只是该类的用户用于访问内部变量的一种方法
使用属性将内部存储器抽象化可以让您处理行总数的问题因为属性存取器执行计算过程实际上使用这种抽象意味着可以使用您所喜欢的任何方法来保存CartItem的内部状态而且不需要修改那些使用CartItem的代码
对于实际保存属性值的私有变量的命名并没有严格的限制但通常都使用一个下划线作为前缀同时也区分了大小写因此如果属性为LineTotal则内部私有变量为lineTotal
[] [] [] [] [] [] [] []