![]() |
1
36
如果将该成员设置为公共字段,则在不更改类的接口的情况下,以后无法将其重构为属性。如果从一开始就将其作为属性公开,则可以根据需要对属性访问器函数进行任何更改,并且类的接口保持不变。
这就消除了最初不将公共字段作为属性实现的唯一理由。 |
![]() |
2
13
现在,您可以更改属性的实现(可能从数据库中获取值,而不是将其存储在字段中)。然后可以重新编译程序集A,并替换旧的程序集。程序集B可以正常运行,因为接口不会更改。 但是,如果您最初使用公共字段,并且认为这不合适,并且想要更改实现,并且需要将其转换为属性,那么这意味着您必须更改程序集a的公共接口。该接口的任何客户端(包括程序集B)也必须重新编译和替换,才能使用此新接口。
|
![]() |
3
6
其思想是,如果使用访问器,则可以在不更改API的情况下更改底层实现。例如,如果您决定在设置名称时还需要更新文本框或其他变量,则不需要更改任何客户端代码。 |
![]() |
4
6
|
![]() |
5
3
良好的编程实践。这是一种非常常见的模式,适合OO设计方法。通过公开公共字段,可以公开数据存储方式的内部内容。相反,使用公共属性可以更灵活地更改数据的内部存储方式,而不会破坏公共接口。它还允许您更好地控制访问数据时发生的情况(延迟初始化、空检查等) |
![]() |
6
2
变量是类实现的一部分。属性更符合逻辑地表示它的接口。在C#3.0中,自动实现的属性从一开始就可以轻松实现。 关于这一点,我写了更多的想法,包括从变量更改为属性不仅会破坏二进制兼容性,还会破坏源代码兼容性的各种方式 an article on the topic . |
![]() |
7
0
|
![]() |
8
0
|
![]() |
9
0
对于封装,不建议使用公共字段。 http://my.safaribooksonline.com/9780321578815/ch05lev1sec5?displaygrbooks=0 正如Chris Anderson在本书后面所说的,如果打电话的人对场地和财产的区别视而不见,那将是理想的选择。 |
![]() |
10
0
为了在不重新编译所有程序集的情况下保持高度的可扩展性,您希望使用公共属性作为访问器。通过遵循“契约”或描述对象如何交换数据的已定义机制,一组规则将落实到位。此约定由接口强制执行,并由继承此接口的类的getter和setter实现。 稍后,如果您从该接口创建其他类,您可以灵活地使用属性来遵守约定,但是由于您是通过getter和setter提供数据的,因此组装数据的实现或过程可以是您想要的任何内容,以及返回“约定”所期望的类型。 |
|
simply lemon · python上链表的添加方法 1 年前 |
|
Anonymous · 为什么在这个例子中self和类名的用法不同? 1 年前 |
![]() |
P N Singh · 在CPP Oops中调用对象而不创建它 1 年前 |
![]() |
Muthuraj · 如何创建一个通用工厂来创建某种类型的实例[重复] 1 年前 |
![]() |
Andy Votava · 从父类定义调用学生方法 1 年前 |