C#基础学习要点总结2

 

1. 多态. 同1种行为不同的事物具有不同的表现形式.
    父类变量指向子类对象 不同的子类对象对于同1个方法 执行的代码却不一样.
 多态的表现形式 1)将父类类型作为参数 2)将父类类型作为返回值. 
 父类变量指向子类对象 通过父类变量只能点出父类的成员.
 
 实现多态的步骤:
 1) 找出父类
 2) 找出所有子类都具有的相同方法 但是实现方式各不一样.
 3) 将这个方法在父类中标记为虚方法或者抽象方法
 4) 在子类中重写.
 5) 让父类变量指向子类对象(父类类型作为参数 作为返回值)
 6) 调用父类变量的虚方法.
 
 
2. 存在重写的时候.
  在子类中使用base关键字调用虚方法的时候,调用的是父类的.
  使用this关键字调用虚方法的时候 调用的子类重写的.
 this/base调用父类的普通方法的时候 都是调用的父类的.
 
3. 如果在子类中直接调用使用base关键字调用虚方法,将直接调用的是父类的虚方法.

4. 如果在子类中调用父类的方法A(普通方法),而父类的A方法里又调用了父类的虚方法B(B又被子类重写了)
 这个时候调用B方法的时候会调用子类重写的方法.
 
5. 密封类不能被继承.
6. sealed修饰的方法子类不能重写.
     sealed 关键字如果用来密封方法 就必须要和oveerride关键字在一起.
 C从B继承 B从A继承 A中有1个虚方法.B重写了这个虚方法,但是不希望C去重写 可以在B中将这个方法用sealed来修饰.
 
7. 属性的本质是方法 所以属性也可以虚。
 
8. 虚方法子类可以重写也不可以重写,但是有的时候我们有需求要求子类必须去重写.这个时候我们可以使用抽象方法.

9.   抽象方法没有实现.不要写打括弧.
  抽象方法只能在抽象类中.
  子类必须重写抽象类的抽象方法 除非子类也是1个抽象类.
  抽象类不能被实例化, 因为抽象成员没有方法实现
  抽象类中可以包含抽象成员 也可以包含非抽象成员.
  抽象类就是来被继承的.
  抽象类有构造函数 虽然不能被实例化 但是要被子类对象调用. 并初始化抽象类成员.
  
 
  抽象类 abstract
  抽象方法必须在抽象类中.
  抽象方法不能有任何实现.
  子类必须重写抽象方法 除非子类也是1个抽象类.
  抽象类不能实例化
  抽象类中可以包括普通成员 也可以包括抽象成员.
  抽象成员的访问修饰符不能标记为private.
  
  
10.接口
 接口中的成员不能有任何实现.
 接口的成员不能有访问修饰符 默认就是public
 接口中只能定义索引器 方法 属性(属性不是要自动产生字段么?) 事件  属性里不能有实现
 接口的命名规范 I**able 实现这个接口的类 就具有了这样的功能.
 接口可以多实现 类只能单继承. 如果同时实现接口又继承 那么父类要写在第一个.
 接口的实现类必须实现接口的成员.
 接口可以继承接口
 接口不能被实例化 因为没有实现
 可以把接口成员实现为虚方法或者抽象方法
 显示实现接口 只能通过接口来访问...因为显示实现后是private
 接口污染 因为接口可以多实现 所以不需要定义多功能接口 因为有些功能不是子类一定要实现的
 接口的本质是1个特殊的抽象类..
 不能有构造函数.
 鸟  麻雀 鸵鸟  企鹅penguin   鹦鹉parrot
  麻雀 鹦鹉可以飞 鸵鸟 企鹅不能飞
  他们继承自鸟类  但鸟类里面能有飞方法吗?

 11.接口多态
 什么时候用抽象类....当不属于同1个系列 或者同1个系列但是系列中不是所有的子类都用这样的功能.
         当需要有成员被继承的时候 可以用抽象类
         当仅仅是为了规范 仅仅是为了规定 可以用接口. 
     

 

原文地址:https://www.cnblogs.com/chenanzixue/p/3464976.html