创建课程的策略

时间:2012-03-13 13:41:20

标签: .net performance

这是第一种方式:

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

首选哪种方式?

3 个答案:

答案 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;)

如果您的方式完成了微软的建议,那么您的首选方式就是首选。你的代码简短而甜蜜。但是,只有你对发生的事情有充分的了解,我才会建议你这样做。当我没必要的时候,我已经在路上跑了太多次重新发明轮子。