这是第一种方式:
Public Class MyClass
Private _Property As String
Property Property () As String
Get
Return _Property
End Get
Set(ByVal Value As String)
_Property = Value
End Set
End Property
Public Function DoSomething() As String
Return _Property & Now()
End Function
End Class
我也可以这样做:
Public Class MyClass
Public Property As String
Public Function DoSomething() As String
Return Property & Now()
End Function
End Class
首选哪种方式?
答案 0 :(得分:2)
你问题的答案取决于你想要实现的目标......
在第一种方式中,您“隐藏”来自“用户”的信息。如果您正在为自己编写代码并且您确切地知道自己在做什么,那么您可以像第二种方式那样做。
但最常见的是使用公共属性是不好的方式。因为当你这样做时,你失去了对公共财产的控制权,因为任何人都可以改变它,而不使用getter / setter。
因此,如果您正在编写类似API的内容,则不应使用公共属性,因为您要严格限制对属性的访问...
例如:如果使用第一种方法,但删除Set方法并在构造函数中自己初始化属性。然后没有办法从外面改变属性,因为它是私有的。但是你仍然可以从外界“问”你的班级,Get(),你将收到你所定义的内容。
使用信息隐藏,以防止其他“愚蠢”的程序员滥用您的课程并获得错误的结果......
答案 1 :(得分:2)
较短的方式是优选的(由我),因为它更容易阅读和理解。如果您需要做一些特别的事情,可以随时切换到完全书写的属性定义。
但有些评论。
您应始终在代码中使用属性getter(Property)。切勿使用内部变量(_Property)。这很重要,因为这种方式与内部变量的所有交互都经过一个单独的点,您可以轻松修改。也许您希望格式化属性或在值不正确时抛出异常等。因此DoSomething函数在两种方法中都应该完全相同。
Public Function DoSomething() As String
Return Me.Property & Now()
End Function
最后,属性简写不正确。它应该是:
Public Property [Property] as String
你没有给它起个名字。我假设你想把它命名为'Property'。我认为这是一个保留字,因此你可能会遇到问题。通过声明它,编译器不会跳过它。但是你应该明智地避免在你的班级中使用保留词。方法名称。
答案 2 :(得分:1)
首先,我会正确拼写MyClass
;)
如果您的方式完成了微软的建议,那么您的首选方式就是首选。你的代码简短而甜蜜。但是,只有你对发生的事情有充分的了解,我才会建议你这样做。当我没必要的时候,我已经在路上跑了太多次重新发明轮子。