面向对象集锦

命名规范
骆驼命名法:首字母小写 之后的首字母大写
帕斯卡命名法:首字母大写 之后的首字母也大写

面向对象
三大特性:封装  继承  多态

访问修饰符
private:当前类中可以访问,类中成员的默认访问修饰符
protected:当前类及子类中可以访问(在继承中用)
*internal:当前程序集内部可以访问
*protected internal:当前程序集或子类中(不同程序集也可以访问)
public:任何地方
类中的成员,如果不加访问修饰符,则默认为private
类如果不加访问修饰符,则默认为internal

多态:多态就是指不同对象收到相同消息时,会产生不同行为,同一个类在不同的场合下表现出不同的行为特征
多态的作用:把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化
为了程序的可扩展性


里氏转换:如果在某一个地方,需要你传一个父类,那么你也可以传           一个子类---子类可以赋值给父类
          如果一个父类中装的是子类对象,那么你可以将这个父类 强制转换为对应的子类
   
          父类只能使用自己的成员

   
is/as:is是转换的意思。转换成功返回true,转回失败返回false   
     as也是转换的意思。转换成功返回对应的对象,失败则返回null
   
实现多态手段1:虚方法
在子类中,如果有一个和父类中方法签名相同的方法,则编译器会报警告
解决办法:为父类中的方法加一个virtual关键字,为子类中的方法加一个override关键字
父类中如果有方法需要让子类重写,则可以将该方法标记为virtual
虚方法必须有实现部分,哪怕是空实现
子类可以重写父类中的虚方法,也可以不重写
类Object中有一个虚方法ToString()

实现多态手段2:抽象方法
需要用abstract关键字标记--public abstract class
抽象方法必须写在抽象类中,不能写在一个实例类中
父类中的抽象成员,子类继承以后必须重写,除非子类也是一个抽象类
抽象类不能被实例化;抽象类有构造函数,以用来初始化实例成员
抽象类的作用就是为了让子类继承
抽象类中可以包括抽象方法,也可以包括有代码的方法

虚方法VS抽象方法
抽象类中的抽象成员不能使用private访问修饰符,可以使用其他访问修饰符
虚方法:父类中必须有实现;子类中可以不重写;虚方法可以在普通类中
抽象法:父类中不能有任何实现;子类中必须重写(除非:子类也是一个抽象类);抽象方法必须在抽象类中
什么时候用虚方法:父类本身需要被实例化;这个方法在父类中有实现的必要(有意义)(方法有默认的实现)
什么时候用抽象方法:在当前系统中,父类绝对不会被实例化;在父类中不知道如何去实现这个方法(没有默认的实现)
用override修饰的方法,本身就是一个虚方法

实现多态手段3:接口
什么是接口?
接口就是一种规范,协议(*),约定好遵守某种规范就可以写通用的代码。
定义了一组具有各种功能的方法。(只是一种能力,没有具体实现,像抽象方法一样,“光说不做”)
接口存在的意义:多态
接口解决了类的多继承的问题
接口解决了类继承以后体积庞大的问题
接口之间可以实现多继承
子类继承抽象类,实现接口
接口中的成员必须不能有实现,接口不能实例化
接口中的成员不能有访问修饰符,隐式公开public
接口中可以有属性、方法、索引器等,但不能有字段
接口中的所有成员必须被子类中全部实现

显示实现接口
为什么要显示实现接口?
方法重名后的解决办法
显示实现接口后,只能通过接口来调用。不能通过类对象本身来调用(显示实现的接口,查看IL是private的,防止通过类来调用)
为什么要有“显示实现接口”?
可以解决重名方法的问题
什么是“显示实现接口”?
实现接口中的方法时用:接口名.方法名(),并且没有访问修饰符,private
“显示实现接口”后怎么调用?
只能通过接口变量来调用,因为显示实现接口默认为private

接口特点
接口是一种规范,为了多态
接口不能被实例化
接口中的成员不能加“访问修饰符”,接口中的成员访问修饰符为public,不能修改(默认为public)
接口中的成员不能有任何实现(“光说不做”,只是定义了一组未实现的成员)
接口中只能有方法、属性、索引器、事件,不能有“字段”
接口与接口之间可以继承,并且可以多继承
实现接口的子类必须实现该接口的全部成员
一个类可以同时继承一个类并实现多个接口,类必须写在接口前面,之间用逗号分隔
当一个抽象类实现接口的时候,如果不想把接口中的成员实现,可以把该成员实现为abstract(抽象类也能实现接口,用abstrac标记)
“显示实现接口”,只能通过接口变量来调用(因为显示实现接口后成员为private)

抽象类
不能被实例化,需要被继承。多态
子类必须重写父类中的所有的抽象成员,除非:子类也是一个抽象类
抽象成员在父类中不能有任何实现
抽象类中可以有实例成员
抽象成员的访问修饰符不能是private
抽象成员只能写在抽象类中
abstract

接口
定义接口的语法(interface)
接口中只能包含方法、属性、索引器、事件。不能包含字段
接口中的成员不能有任何的实现(真正的“光说不做”。思考这样做的意义。联想抽象类中的抽象方法)
接口中的成员不能写访问修饰符
使用接口的语法
一个类可以实现多个接口
实现接口的类,必须把接口中的所有成员都实现
子类实现接口中的成员时,不能修改成员的访问修饰符、参数列表、方法名等(与方法重写一样)

抽象类VS接口
一个类只能继承自一个类(抽象类),但是可以同时实现多个接口
接口中不能有实现,抽象类中可以有未实现成员也可以有实现的成员
接口中未实现的方法必须在子类中实现,抽象类中未实现的成员必须在子类中重写
好的接口定义应该是具有专一功能性的,而不是多功能的,否则造成接口污染。如果一个类只是实现了这个接口的中一个功能,而不得不去实现接口中的其他方法,就叫接口污染??
什么时候使用抽象类,什么时候使用接口:抽象类主要用于关系密切的对象;而接口适合为不相关的类提供通用功能

posted @ 2013-11-22 22:38  郭海静  阅读(417)  评论(0)    收藏  举报