当前位置:文档之家› 学习指导书

学习指导书

System.Console.WriteLine("Time in hours: "+ t.Hours);
}
}
共性问题:
a)属性与字段容易混淆
属性与字段的异同:
相同:都是表示类的一个数据(如人的身高、体重等)。
不同:属性对外部和派生类开放。这也解释了为什么需要加逻辑验证。
字段对内部开放。提供更快的性能,更少的验证,信任程序员。
3)封装还可以提高易用性。封装后只暴露最少的信息给用户,对外接口清晰,使用更方便,更具用户友好性。试想,如果普通用户都要知道机箱内部各种芯片和跳线是如何布局的,那是多么恐怖的事情,到现在为止编者甚至还搞不清楚硬盘的跳线设置,幸好也没有必要知道。
2、掌握封装在编程语言中的使用场合和表现形式
封装有两层含义,其一是隐藏内部行为,即隐藏内部函数,调用者只能看到对外提供的公共函数。其二是隐藏内部信息,即隐藏内部数据成员。
属性
1、声明属性
2、提供属性验证
3、只读和只写属性
极高
熟练
属性的由来,提供了那些作用,理解只读只写属性。也为前面所学封装在此很好的体会。
二:重难点知识点
重难点
学习方法:
1、首先要从现实世界到编程世界封装的的用处
1)所谓的封装其实就是保护对象隐私。当然,没有人能完全隐藏自己的隐私,比如现实生活中去转户口时,不得不透露自己的家庭信息和健康状况。另外,在不同的场合所透露隐私的数量也不一样,朋友和家人可能会知道你更多的隐私,同事次之,其他人则知道得更少。面向对象的编程也考虑了这些实际的情况,所以编程语言有public、private、protected、friend等关键字,以适应于不同的情况。在面向对象的编程过程中为什么需要封装(Encapsulation)呢?因为对象也有隐私,对象的隐私就是对象内部的实现细节。要想对象保持良好的形象就要保护好对象隐私,
实例语法:
econds;
publicdoubleHours
{
get{returnseconds / 3600; }
set{ seconds = value * 3600; }
}
}
classProgram
{
staticvoidMain()
{
TimePeriod t =newTimePeriod();
结果是什么?为”NoName”,而在本质上,o1与o2的Name是根本不相等的。这会对后面的程序运行带来很大的麻烦。请以抛出异常的形式来解决数据不满足条件时的问题。
// Assigning the Hours property causes the 'set' accessor to be called.
t.Hours = 24;
// Evaluating the Hours property causes the 'get' accessor to be called.
出于以下几点原因,请在设计类时,尽可能的使用属性,而不是成员。
1、.Net对属性的支持远远大于对成员的支持,你可以对属性进行数据绑定,设计时说明等很多数据成员不被支持的内容。看看.net里的属性面板,你会明白的。
2、数据安全性检测;
属性本质上是两个函数,只是因为C#的特殊语法,但我们可以像访问成员一样的访问它。因此我们可以在属性设计上添加更多更灵活的内容,对属性进行管理。其中对属性数据的检测是其中之一。
在对数据检测时,如果发现数据不满足条件,最好以抛出异常的形式来解决,千万不要设置默认值,这是很危险的事情。例如:
public string Name{
get{
if(this._Name==null){
return “NoName”;
}else{
return this._Name;
}
}
set{
if(value==null){
b)属性的使用场合把握不准
尽可能的使用属性(property),而不是数据成员(field)。
我们的目标:尽可能编写出运行效率更高,更健壮,更容易维护的C#代码。
原则一:尽可能的使用属性(property),而不是数据成员(field)。
Always use properties instead of accessible data members.
2)封装可以隔离变化。对象内部是非常容易变化的,比如:电脑在不断升级,机箱还是方的,但里面装的CPU和内存已是今非昔比了。变化是不可避免的,但变化所影响的范围是可以控制的,不管CPU怎么变,它不应该影响用户使用的方式。封装是隔离变化的好办法,用机箱把CPU和内存等封装起来,对外只提供一些标准的接口,如USB接口、网线接口和显示器接口等,只要这些接口不变,不管内部怎么变化,也不会影响用户的使用方式。
为了实现数据的封装,提高数据的安全性,一般建议把类的属性声明为私有的,把类的方法声明为公共的。这样,对象能够直接调用类中定义的所有方法,当对象想要修改或得到自己的属性的时候就必须要调用以定义好的专用的方法才能够实现。在考虑封装的时候,建议遵守“对象调方法,方法改属性”的要求即可。
重难点
概念:属性是提供一个灵活的机制来读取、写入,或计算私有字段的值的成员。可以像使用公共数据成员一样使用属性,但实际上它们是称作“访问器”的特殊方法。这使得可以轻松访问数据,此外还有助于提高方法的安全性和灵活性。
第一单元封装学习指导书
一:学习目标
知识点
知识点重要性
掌握程度
知识点关联
封装性
1、封装的威力
2、this关键字
极高
了解
从面向思想编程角度理解封装,理解封装的作用,为后续学习属性等提供伏笔。
访问修饰符
1、成员的访问修饰符
2、成员的访问修饰符
极高
熟练
该部分内容在后续课程中应用比较广泛,重点理解各个访问修饰符之间的区别与联系
this._Name = “NoName”;
}else if(value.Length<=10){
this._Name = value;
}else{
this._Name = value.SubString(0,10);
}
}
}
看上去很不错不是吗?请马上动手修改你的代码吧,上面的代码是很危险的!或者你还不明白,明明对数据进行了安全检测,为什么还是危险的呢?试想这样的情况,有两个实例o1与o2, o1的Name为null,我们做了这样的事: = ;
相关主题