在编写代码时,我总是尝试遵循封装的原则。例如,执行以下操作:
公开课学生
private Name As String
public sub setName(ByVal name2 As String)
Name = Name2
End Public而不是允许客户端直接访问属性,例如:
Dim s1 As Student
s1.Name = "Mark"所有的书都说遵循选项2是不好的做法,因为这意味着如果你改变类,客户端代码可能会崩溃。然而,我并不完全理解为什么会这样。如果移除Name成员,则无论是否允许客户端直接访问该属性,客户端代码都将中断。我遗漏了什么?
发布于 2012-08-21 06:27:09
简单来说,Name与返回String的属性或方法签名不是二进制兼容的。因此,如果创建公共成员,然后将其更改为属性,则会破坏最初调用该成员的所有客户端代码。
更多信息请点击此处:http://csharpindepth.com/Articles/Chapter8/PropertiesMatter.aspx
其他原因:
发布于 2012-08-21 06:28:39
如果你有一个属性,你可以在一个接口中定义它,这在字段中是不可能的。您还可以区分getter和setter,从而创建只读的“字段”。这个想法是给外界提供尽可能少的选择,这样你就有更少的场景需要考虑。
发布于 2012-08-21 06:32:58
使用这些空属性,除了将给定值分配给字段,或者返回字段值之外,什么也不做,这是代码膨胀。这不是封装。
封装,在其真正的本质上,是指字段完全隐藏在外部,以至于外部的任何代码甚至不知道有多少个字段,更不用说字段的类型或值了。然后,需要对字段进行的任何处理都由类的公共方法完成。
邮件类就是一个例子。对于外部世界来说,你存储电子邮件地址的格式并不重要,例如,你将域名部分拆分成一个单独的字符串。类的内部工作,这是放在私有字段中的值,其方式必须对外部完全不透明。
就像有人向你借钱一样。那个人不需要知道你把钱放在哪里,钱包里,保险箱里,银行账户里。那个人也不需要知道你总共有多少钱。你,班上的同学,负责把钱拿出来给他们。
我通过将所有字段设置为私有来实现这一点。我的很多方法也是私有的。它只是一小部分用于消息传递的公共方法。此外,值永远不会通过引用返回,而总是通过值返回,因此外部世界不能在不经过我的方法的过滤器的情况下更改我的类中的数据。
属性实际上是一种方法。只要你有一个方法,你就必须做一些独特的处理。处理是逻辑的,有条件或循环,或两者兼而有之。条件可能隐藏在多态行为的形式中,但仍然是条件。如果您不需要进行任何处理,那么就不需要使用该方法。
https://stackoverflow.com/questions/12046064
复制相似问题