Visual Basic:结构成员的只读可见性
Visual Basic: Read only Visability of Structure members
好的,在我问过一个涉及结构和 classes 的上一个问题之后就是这种情况。所以引用 (我现在使用 classes 作为基础)我有一个 class 的成员,它是一个数组(我知道我必须声明它没有维度) 作为构造函数的一部分,我希望它定义数组的维度。当我最初尝试执行 ReDim
时,编译器不高兴,因为我将成员声明为 ReadOnly
。虽然我对阵列所做的事情有它自己的可行性问题,但这不是我要问的,因为它提出了一个我必须首先回答的不同问题。
有没有办法让 class/structure 的成员只在 class/structure 之外读取,但可以在 class/structure 中修改,而无需使用属性或内部 functions/subs 以获得读取权限?
基本上类似于将成员声明为私有,但您至少可以在 class/structure 之外读取该成员。只是没有别的。
没有。就其本身而言,无法使 class 字段 public 用于读取,但私有用于写入。字段上的可访问性修饰符影响读取和写入。
做你想做的最干净的方法是在你的 class 中定义一个私有字段,并定义一个 public 属性 getter:
Private _dummy As String
Public Property Dummy() As String
Get
Return _dummy
End Get
End Property
当然,如果能够更简洁地表达这一点就好了,就像使用自动实现的属性的 C# 一样:
public string Dummy {get; private set;}
你可以这样做
Private _some As String
Public Property Some As String
Get
Return _some
End Get
Private Set(value As String)
_some = value
End Set
End Property
好的,在我问过一个涉及结构和 classes 的上一个问题之后就是这种情况。所以引用 ReDim
时,编译器不高兴,因为我将成员声明为 ReadOnly
。虽然我对阵列所做的事情有它自己的可行性问题,但这不是我要问的,因为它提出了一个我必须首先回答的不同问题。
有没有办法让 class/structure 的成员只在 class/structure 之外读取,但可以在 class/structure 中修改,而无需使用属性或内部 functions/subs 以获得读取权限?
基本上类似于将成员声明为私有,但您至少可以在 class/structure 之外读取该成员。只是没有别的。
没有。就其本身而言,无法使 class 字段 public 用于读取,但私有用于写入。字段上的可访问性修饰符影响读取和写入。
做你想做的最干净的方法是在你的 class 中定义一个私有字段,并定义一个 public 属性 getter:
Private _dummy As String
Public Property Dummy() As String
Get
Return _dummy
End Get
End Property
当然,如果能够更简洁地表达这一点就好了,就像使用自动实现的属性的 C# 一样:
public string Dummy {get; private set;}
你可以这样做
Private _some As String
Public Property Some As String
Get
Return _some
End Get
Private Set(value As String)
_some = value
End Set
End Property