在这堂课中使用Property有什么好处吗?

时间:2011-05-18 12:21:27

标签: vb.net oop

我有以下课程:

Class MyClass

    Property MyInteger as Integer
        Set(ByVal value as Integer)
            _MyInteger = value
        End Set
        Get
            Return _MyInteger
        End Get
    End Property
    Private _MyInteger as Integer

End Class

由于我在我的房产中没有使用任何验证等,在这种情况下使用房产是否有任何优势,或者是否更适合使用:

Class MyClass

    Public MyInteger as Integer

End Class

4 个答案:

答案 0 :(得分:3)

一般来说,类中的公共成员变量是不受欢迎的,它打破了面向对象编程的封装原则。

这样的规则不是为了它,而是有充分的理由。通过使变量公开,您使代码更难以维护并限制您以后可以使用它做什么。

虽然您现在可能不想对值进行验证,但如果您以后需要添加它会发生什么?如果你需要将它设为只读值,那么类本身可以改变值,但是客户端不能这样做呢?

这会导致最大的问题是如果您正在实施库。如果您使用公共成员提供库的版本1,然后在库的第二个版本中,必须将其转换为属性,则必须重新编译使用该库的每个程序集。

正因为这个原因(以及其他)VB.net 10添加了自动属性:

Class MyClass
    Public Property MyInteger as Integer
End Class

现在您可以默认为您创建公共成员变量的事物创建自动属性,然后如果您以后需要升级到完整属性,那么可以在不更改界面的情况下这样做。

答案 1 :(得分:0)

这取决于您是否要使用封装并让类“控制”该值,或者您对“外部力”操纵的数字感到高兴。如果是前者,那么我建议你有一个结构而不是一个类。

您想将课堂内部暴露给外界吗?

答案 2 :(得分:0)

好吧,如果你想违反封装(OOP的基本原则)你可以用另一种方式来做。你永远不应该直接访问外部世界的成员。

答案 3 :(得分:0)

我认为只要他们谈论支持自动属性的最新VS.NET版本,到目前为止所有答案都是正确的。与此同时,我不得不同意对ALWAYS做房产的建议。想象一下,如果您的班级有100多名成员且不需要任何验证。从商业角度来看,你将不得不投入大量时间来创建成员和财产封装 - 只是因为将来你可能需要它们。

我建议使用一些不同的规则:当类/ DLL的使用者是外部的时,请始终遵循Property规则,这样他们就不会强制兼容性,也不会强制他们重新编译代码。或者,如果您知道该类只是项目的内部,并且您通过不进行封装将节省大量时间,您可以选择业务方法并节省时间。在一天结束时,我们的项目总是迟到,我们的主要目标之一是赚钱(也许不是为了我们自己而是为了雇用我们的其他人),对吗?