学习指导书.doc

上传人:doc321 文档编号:14938314 上传时间:2022-02-25 格式:DOC 页数:11 大小:91KB
返回 下载 相关 举报
学习指导书.doc_第1页
第1页 / 共11页
学习指导书.doc_第2页
第2页 / 共11页
学习指导书.doc_第3页
第3页 / 共11页
学习指导书.doc_第4页
第4页 / 共11页
学习指导书.doc_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《学习指导书.doc》由会员分享,可在线阅读,更多相关《学习指导书.doc(11页珍藏版)》请在三一文库上搜索。

1、第一单元封装学习指导书一:学习目标知识点知识点重要性掌握程度知识点关联封装性1、 封装的威力2、 this关键字极高了解从面向思想编程角度理解封装,理解封装的作用,为后续学习属性等提供伏笔。访问修饰符1、 成员的访问修饰符2、 成员的访问修饰符 极高 熟练该部分内容在后续课程中应用比较广泛,重点理解各个访问修饰符之间的区别与联系属性1、 声明属性2、 提供属性验证3、 只读和只写属性极高熟练属性的由来,提供了那些作用,理解只读只写属性。也为前面所学封装在此很好的体会。二:重难点知识点重难点1:封装的概念学习方法:1、 首先要从现实世界到编程世界封装的的用处1)所谓的封装其实就是保护对象隐私。当

2、然,没有人能完全隐藏自己的隐私,比如现实生活中去转户口时,不得不透露自己的家庭信息和健康状况。另外,在不同的场合所透露隐私的数量也不一样,朋友和家人可能会知道你更多的隐私,同事次之,其他人则知道得更少。面向对象的编程也考虑了这些实际的情况,所以编程语言有 public、private、 protected、friend等关键字,以适应于不同的情况。在面向对象的编程过程中为什么需要封装(Encapsulation)呢?因为对象也有隐私,对象的隐私就是对象内部的实现细节。要想对象保持良好的形象就要保护好对象隐私,2)封装可以隔离变化。对象内部是非常容易变化的,比如:电脑在不断升级,机箱还是方的,但

3、里面装的CPU和内存已是今非昔比了。变化是不可避免的,但变化所影响的范围是可以控制的,不管CPU怎么变,它不应该影响用户使用的方式。封装是隔离变化的好办法,用机箱把CPU和内存等封装起来,对外只提供一些标准的接口,如USB接口、网线接口和显示器接口等,只要这些接口不变,不管内部怎么变化,也不会影响用户的使用方式。3) 封装还可以提高易用性。封装后只暴露最少的信息给用户,对外接口清晰,使用更方便,更具用户友好性。试想,如果普通用户都要知道机箱内部各种芯片和跳线是如何布局的,那是多么恐怖的事情,到现在为止编者甚至还搞不清楚硬盘的跳线设置,幸好也没有必要知道。2、 掌握封装在编程语言中的使用场合和表

4、现形式封装有两层含义,其一是隐藏内部行为,即隐藏内部函数,调用者只能看到对外提供的公共函数。其二是隐藏内部信息,即隐藏内部数据成员。为了实现数据的封装,提高数据的安全性,一般建议把类的属性声明为私有的,把类的方法声明为公共的。这样,对象能够直接调用类中定义的所有方法,当对象想要修改或得到自己的属性的时候就必须要调用以定义好的专用的方法才能够实现。在考虑封装的时候,建议遵守“对象调方法,方法改属性”的要求即可。重难点2:属性的概念概念:属性是提供一个灵活的机制来读取、 写入,或计算私有字段的值的成员。 可以像使用公共数据成员一样使用属性,但实际上它们是称作“访问器”的特殊方法。 这使得可以轻松访

5、问数据,此外还有助于提高方法的安全性和灵活性。实例语法:class TimePeriod private double seconds; public double Hours get return seconds / 3600; set seconds = value * 3600; class Program static void Main() TimePeriod t = new TimePeriod(); / Assigning the Hours property causes the set accessor to be called. t.Hours = 24; / Evalu

6、ating the Hours property causes the get accessor to be called. System.Console.WriteLine(Time in hours: + t.Hours); 共性问题:a) 属性与字段容易混淆属性与字段的异同: 相同:都是表示类的一个数据(如人的身高、体重等)。 不同:属性对外部和派生类开放。这也解释了为什么需要加逻辑验证。字段对内部开放。提供更快的性能,更少的验证,信任程序员。b)属性的使用场合把握不准尽可能的使用属性(property),而不是数据成员(field)。我们的目标:尽可能编写出运行效率更高,更健壮,更容易

7、维护的C代码。原则一:尽可能的使用属性(property),而不是数据成员(field)。Always use properties instead of accessible data members.出于以下几点原因,请在设计类时,尽可能的使用属性,而不是成员。1、.Net对属性的支持远远大于对成员的支持,你可以对属性进行数据绑定,设计时说明等很多数据成员不被支持的内容。看看.net里的属性面板,你会明白的。2、数据安全性检测;属性本质上是两个函数,只是因为C的特殊语法,但我们可以像访问成员一样的访问它。因此我们可以在属性设计上添加更多更灵活的内容,对属性进行管理。其中对属性数据的检测是其

8、中之一。在对数据检测时,如果发现数据不满足条件,最好以抛出异常的形式来解决,千万不要设置默认值,这是很危险的事情。例如:public string Namegetif(this._Name=null)return “NoName”;elsereturn this._Name;setif(value=null)this._Name = “NoName”;else if(value.Length=10)this._Name = value;elsethis._Name = value.SubString(0,10);看上去很不错不是吗?请马上动手修改你的代码吧,上面的代码是很危险的!或者你还不明白

9、,明明对数据进行了安全检测,为什么还是危险的呢?试想这样的情况,有两个实例o1与o2, o1的Name为null,我们做了这样的事:o2.Name = o1.Name;结果是什么?o2.Name为”NoName”,而在本质上,o1与o2的Name是根本不相等的。这会对后面的程序运行带来很大的麻烦。请以抛出异常的形式来解决数据不满足条件时的问题。辅导视频: 参见视频文件夹作业内容:参见作业文件夹补充阅读: 参见补充阅读文件夹重难点3:this关键字学习方法:首先回顾下访问修饰符的含义:1、由具体的实例体会this关键字的作用在C#中,this关键字代表当前实例,我们可以用this.来调用当前实例

10、的成员方法,变量,属性,字段等; 也可以用this来做为参数状当前实例做为参数传入方法. 下面是你这段程序的注解: / 引入使命空间System using System; / 声明命名空间CallConstructor namespace CallConstructor / 声明类Car public class Car / 在Car类中: / 声明一个非静态的整型变量petalCount,初始值为0 / 未用Static声明的变量叫做静态变量,非静态成员属于 类的实例,我们只能在调用类的构造函数对类进行实例化后才能通过所得的实例加.来访问 int petalCount = 0; / 声明一

11、个非静态的字符串变量s,初始值为null; / 注意:s = null与s = null是不同的 String s = null; / Car类的默认构造函数 Car(int petals) / Car类的默认构造函数中为 petalCount 赋值为传入的参数petals的值 petalCount = petals; / 输出petalCount Console.WriteLine(Constructor w/int arg only,petalCount = + petalCount); / 重载Car类的构造函数 / : this(petals) 表示从当前类中调用petals变量的值来

12、作为构造函数重载方法Car(String s, int petals)的第二个参数 Car(String s, int petals) : this(petals) / 在构造函数中为s赋值 / 非静态成员可以在构造函数或非静态方法中使用this.来调用或访问,也可以直接打变量的名字,因此这一句等效于s = s,但是这时你会发类的变量s与传入的参数s同名,这里会造成二定义,所以要加个this.表示等号左边的s是当前类自己的变量 this.s = s; Console.WriteLine(String & int args); / 重载构造函数,: this(hi, 47) 表示调Car(Str

13、ing s, int petals) 这个重载的构造函数,并直接传入变量hi和47 Car() : this(hi, 47) Console.WriteLine(default constructor); public static void Main() Car x = new Car(); Console.Read(); 共性问题:this引用有三种典型的使用方式。第一种方式是限定被参数掩藏的实例变量;public void Function1(int i) This.i=i; 第二种用法是把当前对象作为参数传给另一个方法;public void Method1() OtherClass

14、obj= new OtherClass(); obj.Method2(this);辅导视频: 参见视频文件夹作业内容:参见作业文件夹补充阅读: 无重难点3:访问修饰符学习方法:public 关键字是类型和类型成员的访问修饰符。公共访问是允许的最高访问级别。对访问公共成员没有限制,如下例所示:class SampleClass public int x; / No access restrictions.示例:在下面的示例中,声明了两个类:Point 和 MainClass。直接从 MainClass 访问 Point 的公共成员 x 和 y。/ protected_public.cs/ Pub

15、lic accessusing System;class Point public int x; public int y;class MainClass static void Main() Point p = new Point(); / Direct access to public members: p.x = 10; p.y = 15; Console.WriteLine(x = 0, y = 1, p.x, p.y); 输出 x = 10, y = 15private 关键字是一个成员访问修饰符。私有访问是允许的最低访问级别。私有成员只有在声明它们的类和结构体中才是可访问的如下例所

16、示:class Employee private int i; double d; / private access by default同一体中的嵌套类型也可以访问那些私有成员。在定义私有成员的类或结构外引用它会导致编译时错误。在此示例中,Employee 类包含两个私有数据成员 name 和 salary。作为私有成员,它们只能通过成员方法来访问,因此,添加了名为 GetName 和 Salary 的公共方法,以允许对私有成员进行受控制的访问。name 成员通过公共方法来访问,salary 成员通过一个公共只读属性来访问。/ private_keyword.csusing System;c

17、lass Employee private string name = FirstName, LastName; private double salary = 100.0; public string GetName() return name; public double Salary get return salary; class MainClass static void Main() Employee e = new Employee(); / The data members are inaccessible (private), so / then cant be access

18、ed like this: / string n = e.name; / double s = e.salary; / name is indirectly accessed via method: string n = e.GetName(); / salary is indirectly accessed via property double s = e.Salary; protected 关键字是一个成员访问修饰符。受保护成员在它的类中可访问并且可由派生类访问。有关 protected 与其他访问修饰符的比较仅当访问通过派生类类型发生时,基类的受保护成员在派生类中才是可访问的。例如,请

19、看以下代码/ protected_keyword.csusing System;class A protected int x = 123;class B : A static void Main() A a = new A(); B b = new B(); / Error CS1540, because x can only be accessed by / classes derived from A. / a.x = 10; / OK, because this class derives from A. b.x = 10; 语句 a.x =10 将生成错误,因为 A 不是从 B 派生的。结构成员无法受保护,因为无法继承结构。它们之间的区别与联系声明的可访问性 含义 public 访问不受限制。protected 访问仅限于包含类或从包含类派生的类型。private 访问仅限于包含类型。辅导视频: 无作业内容: 参见作业文件夹补充阅读: 无三:补充说明:学习本阶段的技能点时,一定要从现实具体的例子去理解程序中抽象的概念,认识到访问修饰符,属性,this等概念应用场合和作用。 (注:可编辑下载,若有不当之处,请指正,谢谢!)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1