为什么要对字段封装属性? 每次有新人来,都要问这个问题,我直接对字段操作多省事呀,就像这样
public class A
{
publicstring _Name;
}
public Class B
{
private A _MyA;
public void DoB(string n)
{
_MyA._Name=n;
}
}
很多砖家会毫不犹豫的说,你这样“封装不好”,于是新人眨着两只无神而又水汪汪的大眼睛,分明是在说:“这不脱了裤子放X吗”,心里一肚子不服气。
但从编程角度说,封装为属性除了从外面看起来“顺眼”些,还有啥实际作用呢?
牛人会巴拉巴拉讲出一大套,我就说一点简单而实用的,那就是是从调试角度看问题。
在调试中,我们经常为使用断点跟踪的方式,检查变量当时的数值,如果按照上面写的方式,很多地方都可能会出现对_Name赋值的情况,如果我发现_Name被设置了非法的数据,而想知道在何地被赋值的时候,上面的写法就很麻烦,只能先找到所有调用过_Name的地方(如果是C++的开发环境,找起来更麻烦),然后一个一个的筛。
如果我们把代码写成这样:
public class A
{
privatestring _Name;
publicstring Name
{
get{...};
set{...};
}
}
public Class B
{
private A _MyA;
internal A MyA
{
get{...};
set{...};
}
public void DoB(string n)
{
MyA.Name=n;
}
}
调试的时候,只需要在Name.set的位置加断点,可以很快定位错误。
当然,一个好的习惯是对class内部的字段也尽量使用属性处理,就像class B中对 MyA的处理一样。就可以很容易的进行断点调试了。
分享到:
相关推荐
C# 生成属性 封装字段 多个字段一起生成 C# 生成属性 封装字段 多个字段一起生成
vs2008编写的可以一次性将多个字段封装为属性的插件源码。 安装方法: 1、把Addins文件夹复制到My Documents\Visual Studio 2008\这个文件夹下 2、把ModelTool.dll复制到C:\WINDOWS\addins\下,然后启动vs2008即可在...
VS2008的"重构"——>"封装字段"功能一次只能封转一个字段,如果字段很多就会很麻烦,这个小插件可以根据选中的所有字段自动生成对应的属性和构造方法 用法: 1、首先写好所有的字段,比如: private int id; string...
支持手动输入字段 支持自定义类型(在) 例:Model.User 支持添加注释 支持初始化 //初始化方法:在“初始化”列输入类似...支持直接从数据库读取字段名称和类型完成属性封装 这个用法没什么好说的,试试就知道了!
vs2008下使用C#编写的可以一次性将多个VB.NET字段或C#字段封装为属性的插件源码。 可以封装C#属性,也可以封装VB.NET属性,是对我另一个资源(http://download.csdn.net/detail/new_coming/5518813,这个资源只能封装...
字段封装器/属性/枚举自动生成器(可从数据库中获取字段、也可以手动输入进行封装。附源码)
.NET的自带属性生成器,只能一次性根据选择的一个字段进行封装,有时候我觉得不方便,所以就自己写了一个常用的字段封装工具
c# 属性字段生成工具 可以有空格; 2011-09-01日上传; vs2008自带的一次只能封装一个字段; 我们可以先把字段写出来;生成后再粘回去;
Hibernate 更新某些字段 ...在 Hibernate 的 XML 配置文件中,我们可以设置某些属性的 update 属性为 false,这样 Hibernate 就不会更新这些属性。例如,我们可以设置 age 属性的 update 属性为 false: ```xml ...
C#语言和SQL Server数据库技术 使用属性升级MyBank 第三章教学演示案例/上机练习参考答案/课后作业参考答案 相关示例提供
* Id:标识此属性为数据库自增长的id,应为int型 * Column:标识此属性对应的数据库字段名 */ @Table(name="t_books") public class Book{ @Id @Column(name="book_id") private int bookId; @Column(name=...
对C#中属性为什么要封装字段?作了一人详细的讲解,让人更容易理解
poi导出导入封装(使用注解建立实体与excel映射关系+反射设置实体属性值), poi导出导入封装(使用注解建立实体与excel映射关系+反射设置实体属性值) poi导出导入封装(使用注解建立实体与excel映射关系+反射设置...
利用C#反射将子类舍弃多余的属性转换为父类,用途比较少。
即无需任何映射,只要是java标准类,属性带标准set、get,属性名称与查询结果集中字段名称相同,就可以直接查询出对象链表和集合。属于超轻量级JDBC高效开发工具。 附DOC文档和源代码。如有改进意见,请邮件我。...
如果属性为只读,则只实现get访问器即可;如果属性为可写,则实现set访问器即可。另外还有一种含参属性,在c#中称为索引器。索引器一般是用来方便对类 实例化对象的引用。 代码如下:public string Name{get{return ...
对 sqlite 的使用进行简单封装,仅涉及简单的单表 增删改查 , 基于 FMDB,操作基于 model ,数据库表字段与 model 属性一一对应,对 model 整体进行操作, 根据 model 对象自动建表,字段类型只支持 NSString , NSIteger ,...
对 sqlite 的使用进行简单封装,仅涉及简单的单表 增删改查 , 基于 FMDB,操作基于 model ,数据库表字段与 model 属性一一对应,对 model 整体进行操作, 根据 model 对象自动建表,字段类型只支持 NSString , NSIteger ,...
定义四个公有属性S_no,S_name,S_class以及S_score,分别用于封装对各字段读写访问。 (3)再定义一个StudentInfo类,用于对学生信息进行管理:该类包括下列成员: 存放学生信息的Student[]类型的私有字段...
毕业论文用到了access数据库,又因设计的需要用到MVC设计模式,需要将数据实体封装成类,设置太多的表,一个一个来完成封装很麻烦(需要打开视图设计器,查看字段名,字段类型),所有才有了这一需求。 0.2关于...