Begin C# Object 学习资料

来源:互联网 发布:手机货到付款淘宝网 编辑:程序博客网 时间:2024/05/16 12:15
1  C#学习笔记

Local variables: 明确的初始化
Fields: 默认初始化为零等价值
do
{code } while (condition);
4.  jump statement:
break  To terminate the code of do, for and while
continue To terminate the current circle of do, for and while
5.  在C#中,可以于代码块内声明变量:
   Example: if (true){ double cost =2.65 ;…}
6.  转义序列
 
/n   new line
/b   退格
/t   制表符
/v   垂直制表符
//
/’

隐式转换:不失精度;显式转换:a= (int) b ;
2  抽象与建模
1. 足够通用---通用简单----复2. 杂限制
3. 级类区分(classification):自顶向下,4. 逐渐复5. 杂
6. 模型:抽象的物理或图像的肖像
7. 建模:决定对象的细节要点
8. 对象建模者应具备9. :
a. 洞察问题所在的能力
b. 创造力
c. 好的倾听技巧
d. 好的观察技巧
e. 抽象方案的有组织过程
f. 软件与用户的沟通
3  Objects and Classes
According to Merriam-Webster’s Collegiate Dictionary, Object is: 
a. 某种可为人所感知的物质;
b. 思维、感受或动作所作用的物质或精神题。
软件对象:一种将状态(数据)和行为(操作)合成到一起的软件构造,用来描述真实世界的一个(物理或概念性的)对象。
行为/操作/方法
当特指软件对象时,我们把对象的行为(操作)定义为用以访问对象的数据和修改/维护数据的方法。
从另一个角度来考虑,对象操作也可以看作是可以向对象要求提供的服务。例如,课程对象提供一种服务,该服务提供当前选修改课程的学生列表(花名册)。
类定义一下要素:
c. 定义该类的对象所需要的数据结构(Fields’name + Fields’Type)
d. 这些对象要执行的操作,e. 尤其是有哪些操作,f. 类的对象如何被调用执行这些操作,g. 以及对象执行这些操作的“后台动作”。
代码:
Student s= new Student();
包含两部分。
h. 声明变量: Student s;
i. 实例化对象:new Student();
任何一个已声明的变量都必须在引用非空的情况下使用,但并不一定要实例化该变量。
Composition: 当我们创建一个类,该类的一个或多个Fields指向另外的对象,则我们是在应用一种被称为“合成”的OO技术。对象互相内嵌的层次是无限制的,合成技术让我们可以对非常复杂的真实世界概念建模。
4  对象互操作
1. 最简化的面向对象软件开发过程包括:
恰当地确定应用程序的功能性需求和总体任务;
设计合适的类,满足这些需求和任务;
实例化类,创建对象;
通过外部触发的事件,驱动对象操作。
一旦OO系统注意到外部触发的时间,合适的对象就会有所反应,执行自身服务或以连锁形式请求其他对象提供服务,直至完成之个系统目标。
事件链条的最总目标达成后,对象们也许会较有效地保持空闲状态,而且有可能一直保持到下一次触发事件发生。
2. 消息:是一个表达式,3. 由对象引用便两名4. 加一个“点”,5. 后面跟随方法调用构成。例:
x.DoSomething();
我们可以这样描述:“调用对象x的方法”,或是“向对象x发送移条消息”。
消息表达式的类型,是方法执行后返回值得类型。
6. 作为调用方法的上下文的对象
         在面向对象语言中,对像被当作方法调用的上下文。我们可以把“x.method_Call(…)”看作是“合对象x交谈”;或是更进一步,“合对象x教堂,要求它执行特定的方法”。
7. 方法签名8. :指9. 代方法头中可被调用代码所“发现”的方面:方法名,10. 传入参数的名11. 称、顺序、类型和数量,12. 但参数名13. 和返回类型却不14. 再其中。
15. 在对象间传递消息
例:假定有两个类——Student类和Course类,在列表4-1中列出了他们各自的方法。
表4-1
 
Student类方法:
Bool SuccessfullyCompleted( Course c) 通过给出一个特定Course对象引用,要求接受该消息的Student对象确认是否已经选修该课程并得到及格分。   
Course类方法:
Bool Register(Student s) 通过给出一个特定Student对象引用,要求接受该消息的Course对象让学生选修。在此情况下,我们期望Course对象返回True或False值,标识选修申请是否通过。 
一个Course对象接受了一下消息
c.Register(s);
为了能够判断是否允许Student对象s选修,Course对象c向s发送以下消息:
         s.SuccessfullyCompleted(c2);
用以确定s是否通过了c课程的先选课程。如果s通过了c课程的先选课程,则表示允许student对象s选修课程c。
16. 对象A向对象B传递消息的唯一途径,17. 是A能访问B的句柄。这有几种可能:
a.  对象A可能把到对象B的引用当作一Field维护。
j. 对象B的引用可能作为一个参数传递到A的一个方法。
k. 到对象B的引用,l. 可能对于整个应用程序式“全局可用”的,m. 这样其他对象也可访问。
n. 对象A可以调用第三个对象C,o. 明确地要求获得B的引用。
作为客户和服务供应者的对象
我们把引起对象A执行一个方法的代码,称作A的客户代码,因为它受益于A提供的服务。例:c.Register(s); s.GetTranscript();
可以把Course对象c看作是Student对象s的客户,因为c请求s执行一个方法GetTranscript,该方法作为一个服务提供给c。
客户代码只能访问被声明为公共的类成员。
从客户代码访问私有数据(Field)有两种方式:取值/赋值方法和取值/赋植访问器。
取值/赋值方法:
  private string name;
  public string GetName(){return name;}
  public void SetName(string newName){name = newName; }
取值/赋值访问器:也就是property访问器。
Field值的持久化:在对象存在内存期间,对象的Field值也继续存在。也就是说,当在应用程序中实体化一个Student对象:Student s= new Student(); 为s的Field赋予得值,无论通过赋值方法或property:s.Name =”Steve” ;都会持续可用,直到s的Field的值被明确地改变或是对象被销毁且它占用的内存被收回。这样,只要为Student 分配的内存存在,无论何时问及其名称,它都会级的上次为name Field赋予的值。
私有数据并不一定非的能被客户代码所访问。
使用Property,我们得到以下好处:
p. 避免对封装数据的未经授权的访问;
q. 帮助确保数据完整(我们可以在property中内建值检查功能,r. 以防止不s. 正当的修改。);
t. 当类的私有实现必须修改时,u. 限制在整个应用程序内导致的连锁反应。
13. 索引器定义:DataType  this[IndexType index]{ get; set;}