我有一个这样的课程
Public Class Settings
Private _app_folder As String = ""
Public Property AppFolder() As String
Get
Return _app_folder
End Get
Set(ByVal value As String)
_app_folder = value
End Set
End Property [...]
然后在另一个班级,我宣布它
_settings = New Settings
我设置了每个属性的值
_settings.AppFolder = "test"
但是如何将“_settings.AppFolder”属性编辑为“readonly”?
答案 0 :(得分:2)
如果你想让AppFolder 始终 ReadOnly,你可以简单地声明:
Private _app_folder As String = ""
Public ReadOnly Property AppFolder() As String
Get
Return _app_folder
End Get
End Property [...]
如果你想在子类中创建ReadOnly,那么你只能通过在客户端代码尝试设置它时抛出异常来做到这一点 - 不可能删除子类的setter。
Public Class SubSettings inherits Settings
Private _app_folder As String = ""
Public Property AppFolder() As String
Get
Return _app_folder
End Get
Set(ByVal value As String)
throw new Exception ("This property cannot be set")
End Set
End Property [...]
最后,如果你想在它的初始设置之后使它成为ReadOnly:
Private _app_folder As String = ""
Private hasBeenSet as Boolean = False;
Public Property AppFolder() As String
Get
Return _app_folder
End Get
Set(ByVal value As String)
If (hasBeenSet)
throw new Exception ("This property cannot be set")
Else
hasBeenSet = true
_app_folder = value
EndIf
End Set
End Property [...]
答案 1 :(得分:2)
除了RB的答案,你可以实现一个接口,并在你需要属性的只读行为时使用它(而不是类)。
Public Interface IReadonlySettings
ReadOnly Property AppFolder() As String
End Interface
Public Class Settings
Implements IReadonlySettings
Private m_AppFolder As String
Public Property AppFolder() As String
Get
Return m_AppFolder
End Get
Set
m_AppFolder = Value
End Set
End Property
private readonly Property ReadonlyAppFolder() As String implements IReadonlySettings.AppFolder
Get
Return m_AppFolder
End Get
End Property
End Class
答案 2 :(得分:2)
另一个选择是更改属性Set的访问权限 - 它可以与Get不同。例如,您可以声明属性Public,但声明Set为Protected。在这种情况下,任何人都可以阅读该属性,但只有类本身及其衍生物可以写入属性。声明Set为Friend将允许类本身和同一程序集中的任何其他类来编写属性。
答案 3 :(得分:0)
使用ReadOnly关键字
Public ReadOnly Property AppFolder() As String
Get
Return _app_folder
End Get
End Property
答案 4 :(得分:0)
如果你确实在谈论继承,那么答案就是 - 你做不到。这会破坏继承:派生类对象是一个基类对象。因此,如果您有类Derived
和Base
,则无法使此代码无法编译:
Dim d As Base = New Derived()
d.SomeProperty = SomeValue
这必须有效。