2、面向对象基础二

对象:一切事物皆为对象,对象是一个自包含的实体,用一组可识别的特性和行为来表示。

面向对象编程:Object-Oriented Programming.

 

减少重复代码的基本方法:

1、使用函数,可以减少重复代码,提高代码复用。

2、类就是具有相同的属性和功能的对象的抽象的集合。

 

class 是定义类的关键字。

类名称首字母要大写,多个单词则各个字母的首字母要大写。

对外公开的方法需要用public 修饰符。

 

实例,就是一个真实的对象,而实例化就是创建对象的过程,使用new关键字来创建。

 

构造函数就是对类进行初始化,构造函数与类同名,无返回值,也不需要void ,在new 的时候调用 。

所有类所有构造函数,如果你不编码则系统默认生成空的构造函数,若你有定义的构造函数,那么默认的构造方法就会失效了。

 

方法重载,提供了创建同名的多个方法的能力,但这些方法需使用不同的参数类型。

方法重载必须方法名相同,但参数类型或个数必须要有所不同。

方法重载可在不改变原方法的基础上,新增功能,提供了函数扩展的能力。

 

 

字段是存储类要满足其设计需要的数据,字段是与类相关的变量。通常是私有的变量,以private 定义。一般是首字母小写或是前加_。

属性是一个方法或一对方法,但在调用它的代码上来看,它是一个字段,即属性适合于以字段的方式使用方法调用的场合。通常属性是公有的,public.,一般首字母大写。

 

public 表示它所修饰的类成员可以允许其它任何类来访问,俗称公有的。而private表示只允许同一个类的成员访问,其他类包括它的子类无法访问,俗称私有的。类的成员不加修饰符,默认是private,私有的。

 

每个对象包含它能进行操作所需要的所有信息,这个特性叫封装。因此,对象泌依赖其它对象来完成自己的操作。

 

封装的优点,1、良好的封装能够减少耦合。2、类内部的实现可以自由的修改。3、类具有清晰的对外的接口,public所修饰的属性和方法。

 

通过继承,可以减少重复的代码。                                 DRY原则。

 

对象的继承代表了一种"is -a "的关系,如果两个对象A和B,可以描述为 B是A,则表明B可以继承A。继承者还可以理解为是对被继承者的特殊化,因为它除了具备被继承者的特性外,还具备自己独有的个性。继承者可以完全取代被继承者,被继承者不能取代继承者。

子类继承父类的所有特性,子类不但继承了父类的所有特性,还要吧定义新的特性。

里氏代换原则

如果子类继承父类,1、子类拥有父类非Private的属性和功能,2、子类拥有自己的属性和功能,即子类可以扩展父类没有的属性和功能。3、子类还可以以自己的方式实现父类的功能。(方法重写)

protected 修饰符表示继承时子类可以对父类在完全访问权,也就是说,对子类公开,但不对其它类公开。

 

子类从它的父类中继承的成员有方法、属性、事件、域、索引指示器,不能继承构造方法,构造方法只能被子类调用。子类构造方法需要调用父类同样参数类型的构造方法,用base关键字代表父类。

 

不有继承的话,如果要修改功能,就必须在所有重复的方法中修改,代码越多,出错的可能性就越大,而继承的优点是,继承使得所有子类公共的部分都放在了父类,使得代码得到了共享,这就避免了重复,另外,继承可使得修改或扩展继承而来的实现较为容易。

 

继承是有缺点的:1、那就是父类变,子类不得不变。

2、继承会破坏封装,父类的实现细节暴露给子类,增大了两个类之间的耦合性。继承显然是一种类与类之间强耦合的关系。

 

多态表示不同的对象可以执行相同的操作,但要通过它们自己的实现代码来执行。

多态:1、子类以父类的身份出现,2、子类在工作时以自己的方式来实现。3、子类以父类的身份出现时, 子类特有的属性和方法不可以使用。

为了使子类的实例完全接替来自父类的类成员,父类必须将该成员声明为虚拟的,这是通过在该成员的返回类型之前添加virtual 关键字。虚方法还是有方法体,可以做实际的事情。

然后,子类可以选择使用override 关键字,将父类的实现接替为它自己的实现,这就是方法重写。

 

要实现多态,对象的声明必须为父类,而不是子类,实例化的对象是子类,调用父类的实现方法,才能实现多态。

 

多态的原理是 当方法被 调用时,无论对象是否被转换为其父类,都只有位于继承链最末端的方法实现会被调用。也就是说,虚方法是按照运行时类型而非编译类型进行动态绑定调用的。

 

没有学过设计模式,那么对多态,乃至对面向对象的理解多半是肤浅和片面的。

 

 

模板方法设计模式,最大限度的利用抽象子类的共性,形成父类再利用多态通过父类的方法来实现子类的方法。

 

C#允许把类和方法声明为abstract ,即抽象类和抽象方法。

 

抽象类的特点:

1、抽象类不能实例化,只能被继承。2、抽象方法是必须重写的方法。抽象方法可以看成是没有实现体的虚方法。3、如果类中包含有抽象方法,类就必须定义为抽象类,不论是否还包含其他一般方法。

 

抽象类拥有尽可能多的共同代码,拥有尽可能多少的数据。

 

抽象类通常代表一个抽象概念,它提供了一个继承的出发点,当设计一个新的抽象类时,一定是用来继承的,所有,在一个继承关系形成的等级结构里面,树叶节点应当是具体类,而树枝结点均应当是抽象类。

 

Interface 接口是把隐式公共方法和属性结合起来,以封装特定功能的一个集合,一旦类实现了接口,类就可以支持接口所指定的所有属性和成员。声明接口在语法上与声明抽象类完全相同,但不充许提供接口中任何成员的实现方式。

接口不能被实例化,不能的构造方法和字段,不能有修饰符。实现接口的类就必须实现接口中的所有方法和属性。

 

一个类可以支持多个接口,多个类也可以支持相同的接口。

 

接口用Interface声明,而不是class,接口名称前要加I,接口中的方法不能有修饰符、方法没有方法体。

 

子类调用父类的方法 base.methodName();

 

抽象类与接口的区别:

形态区别:

1、抽象类中可以给出一些成员的实现,接口却不包含成员的实现。

2、抽象类的成员可被子类部分实现,接口的成员需要实现类完全实现。一个类只能继承一个抽象类,但可实现多个接口。

本质区别:

1、类是对 对象的抽象。抽象类是对类的抽象,接口是对行为的抽象。接口对类局部(行为)的抽象,抽象类是对类整体(字段、属性、方法)的抽象。

2、如果行为跨越不同类的对象,可使用接口;对于一些相似的类对象,用继承抽象类。

实现接口和继承抽象类并不冲突的,一个类只能继承一个抽象类,却可以实现多个接口。

 

3、从设计的角度讲,抽象类从子类中发现了公共的东西,泛化出父类,然后子类却继承父类,而接口是根本不知道子类的存在,方法如何实现还不确认,预先定义。

抽象类体现了 通过重构改善既有代码的设计。

抽象类是自底而上抽象出来的,而接口则是自顶而下设计出来的。

 

 

数组优点,比如数组在内存中连续存储,因此可以快速而容易地从头到尾遍历元素,可以快速修改元素。缺点,创建时必须指定数组变量的大小,还有在两个元素之间添加元素也比较困难。

 

.NET Framework 提供了用于数据存储和检索的专用类,这些类统称为集合,这些类提供对堆栈、队列、列表、哈希表的支持。大多数集合类实现相同的接口。最常用的列表ArrayList。

HashTable、StortedList、Stack。

 

ArrayList 是命名空间System.Collection 下的一部分,它是使用大小可按需动态增加的数组实现IList 接口。

 

ArrayList 的容量是ArrayList 可以保存的元素数,ArrayList 的默认初始容量 为0,随着元素添加到ArrayList中,容量(Capacity)会根据需要通过重新分配自动增加,使用整数索引可以访问其此集合中的元素,此集合从索引零开始。

 

ArrayList 中所有元素都 是object 类型的,编译时没有问题,但运行时检查如果不是应该的类型时,可能报错。ArrayList 不是类型安全的。

 

所谓装箱就是把值类型打包到Object引用类型的一个实例中,拆箱就是从对象中提取出值类型。

int i=123; object o =(int)i;

o=123;i =(int)o;

相对于简单的赋值而言,装箱和拆箱过程需要进行大量的运算,对值类型进行装箱时,必须分配并构造一个全新的对象,其次,拆箱所需的强制转换也需要进行大量的计算。

 

 

泛型是具有占位符(类型参数)的类、结构、接口和方法,这些占位符是类、结构、接口和方法所存储或使用的一个或多个类型的占位符,泛型集合类可以将类型参数用作它所存储的对象的类型的占位符。类型参数作为其字段的类型和其方法的参数类型出现。

 

通常情况下,建议使用泛型集合,因为这样可以获得安全的直接优点,而不需要从基集合类型派生并实现特定的成员。此外,集合元素为值类型,泛型集合类型的性能通常优于对应的非泛型集合类型(并优于从非泛型集合类型派生的类型),因为使用泛型时不必对元素进行装箱。

 

委托是对函数的封装,可以当作给方法的特征指定一个名称,而事件则是委托的一种特殊形式,当发生有意义的事情时,事件对象通知过程。

 

委托是一种引用方法的类型,一旦为委托分配了方法,委托将与该方法具有完全相同的行为。

委托对象用关键字delegate 声明。

事件是说在发生其他类或对象关注的事情时,类或对象可通过事件通知它们。

posted on 2014-07-10 23:38  众里寻他千万度  阅读(115)  评论(0)    收藏  举报

导航