我有以下课程:
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
答案 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规则,这样他们就不会强制兼容性,也不会强制他们重新编译代码。或者,如果您知道该类只是项目的内部,并且您通过不进行封装将节省大量时间,您可以选择业务方法并节省时间。在一天结束时,我们的项目总是迟到,我们的主要目标之一是赚钱(也许不是为了我们自己而是为了雇用我们的其他人),对吗?