【发布时间】:2011-06-12 04:26:20
【问题描述】:
我正在尝试找出在我正在创建的嵌套类中设置和获取属性的最佳方法。
我有一个类 Car,它有一个嵌套类 ControlPanel,我想让控制面板的属性只能由 Car 和控制面板类访问。
(即:不在程序集或命名空间内,也不在将使用类库的应用程序内)...我已将类访问属性更改为朋友、受保护的朋友、私有、公共,但任意组合与我的预期结果不符。
我想更改类的 Drive() Sub 中的属性,如下所示。
有什么想法吗?
Public Class Car
Dim cp As New ControlPanel
Public Class ControlPanel
Private _Speedometer As Integer = 0
Private _Odometer As Integer = 0
Public Property Speedometer() As Integer
Get
Return _Speedometer
End Get
Protected Set(ByVal value As Integer)
_Speedometer = value
End Set
End Property
Public Property Odometer() As Integer
Get
Return _Odometer
End Get
Protected Set(ByVal value As Integer)
_Odometer = value
End Set
End Property
End Class
Public Sub Drive()
cp.Odometer = 76323
co.Speedometer = 86
End Sub
End Class
【问题讨论】:
-
你能扩展你的问题吗?您希望 整个 ControlPanel 类 无法访问,还是希望 只有这两个属性 无法从 Car 以外的任何类访问?此外,您的代码似乎建议您希望对 getter 和 setter 进行不同的访问,但您没有在问题中明确说明这一点。您是否也希望 getter 和 setter 具有不同的访问权限?
-
为混乱道歉。我想看到的是 ControlPanel 在 Car 类之外是只读的,但在 Car 和 Control Panel 类中是读/写的。
-
基于该评论,我认为您正在寻找的是我建议的具有公共(或朋友)接口的私有嵌套类。这将确保 Car 类可以访问 ControlPanel 上的所有成员,但外部只会保留 IControlPanel 的引用,该引用只会公开获取。如果 Car 以外的东西可以实例化 ControlPanel 类,您可能需要某种形式的工厂方法 (Create) 来返回 IControlPanel。
标签: .net vb.net access-modifiers