![]() |
1
13
是的,我认为你理解正确-尽管在C的较新版本中,有一种更简洁的方式来写它:
为什么?这都是关于封装的。如果按照它的建议进行操作,您可以稍后更改域属性的定义,而不影响使用该属性的任何调用代码。因为您的类是公共的,并且可能被您没有编写的代码调用,所以这可能非常重要。 |
![]() |
2
2
是的。这就是建议。您不应该有任何高于私有的可访问性作为直接实例字段公开。 它是OOD封装的主要原则之一,也称为“数据隐藏”。 |
![]() |
3
2
|
![]() |
4
2
你的翻译是正确的。对于使用“protected”属性,可以使用与使用“public”属性相同的参数,而不是直接公开成员变量。 如果这只会导致简单的getter和setter的激增,那么我认为对代码可读性的损害超过了将来能够更改代码的好处。随着C中编译器生成属性的开发,这并不是很糟糕,只需使用:
|
![]() |
5
2
这是因为,如果将来希望将字段更改为属性,则会破坏依赖它的任何其他程序集。 最好的做法是保持所有字段都是私有的,并将它们包装在属性中,这样以后就可以选择添加验证或其他逻辑,而不必重新编译类的所有使用者(或者在本例中是继承者)。 |
![]() |
6
0
为了回答你的问题…对。 但是,我只使用自动属性语法:
|
![]() |
7
0
基本上,属性提供的不仅仅是返回或设置成员。它们允许您添加逻辑来验证正确的输入格式、范围验证等。 从链接中选择的答案是最好的,“属性提供封装。您可以在属性的代码中封装任何需要的验证/格式化/转换。这对于田地来说是很难做到的。” http://social.msdn.microsoft.com/Forums/en-IE/netfxbcl/thread/985f4887-92ae-4ec2-b7ae-ec8cc6eb3a42 |
![]() |
8
0
除了这里提到的其他答案外,以下划线开头的公共/受保护成员 CLS-compliant ,因为.NET语言不需要支持带前导下划线的成员,因此从您的类继承的其他.NET语言的成员可能无法访问该特定的受保护成员。 我知道,它可能不适用于您,但它可能是代码分析警告的部分原因。 |