新的开发工具:Rider Rider
java IDE:IntelliJ IDEA
www.edx.org
ECMA C#
ECMAScript ECMA-262

大纲

  • 类的继承
    • 类成员的“横向扩展”(成员数量增加)
    • 类成员的“纵向扩展”(行为改变,版本增高)
    • 类成员的隐藏(不常用)
    • 重写与隐藏的发生条件:函数成员,可见(public/protected),签名一致
  • 多态(polymorphism)
    • 基于重写机制(virtual->override)
    • 函数成员的具体行为(版本)由对象决定
    • 回顾:C#语言的变量和对象都是有类型的,所以会有“代差”

隐藏与重写

java中是天然重写不需要,C#需要加关键字
virual 虚函数,名存实亡了

方法重写

  1. namespace OverrideExample
  2. {
  3. class Program
  4. {
  5. static void Main(string[] args)
  6. {
  7. Vehicle vehicle = new RaseCar();//is a 父类类型的变量来引用一个子类类型的实例 多态
  8. vehicle.Run();//Car is running 和实例类型相关 如果隐藏掉则是i'm running.
  9. }
  10. }
  11. class Vehicle
  12. {
  13. public virtual void Run()
  14. {
  15. Console.WriteLine("I'm running");
  16. }
  17. }
  18. class Car:Vehicle
  19. {
  20. public int Speed { get; set; }
  21. //public void Run()//直接使用隐藏父类的方法,加关键字new即public new void Run(){}
  22. //{
  23. //}
  24. public override void Run() //重写
  25. {
  26. Console.WriteLine("Car is running");
  27. }
  28. }
  29. class RaseCar:Car
  30. {
  31. public override void Run()
  32. {
  33. Console.WriteLine("Rase car is running!");
  34. }
  35. }
  36. }
  1. public class Main{
  2. public static void main(String[] args){
  3. }
  4. }
  5. class Vehicle{
  6. public void run(){
  7. System.out.printIn("i'm running");
  8. }
  9. }
  10. class Car extends Vehicle{
  11. @Override //检查错误,大小写敏感
  12. public void run(){
  13. System.out.printIn{"Car is running");
  14. }
  15. }

属性重写

  1. namespace OverrideExample
  2. {
  3. class Program
  4. {
  5. static void Main(string[] args)
  6. {
  7. Vehicle vehicle = new Vehicle();
  8. vehicle.Run(); // _speed = 100
  9. Console.WriteLine(vehicle.Speed);
  10. vehicle.Speed = 10000;
  11. }
  12. }
  13. class Vehicle
  14. {
  15. private int _speed;
  16. public virtual int Speed {
  17. get { return _speed; }
  18. set {
  19. _speed = value; }
  20. }
  21. public virtual void Run()
  22. {
  23. Console.WriteLine("I'm running");
  24. _speed = 100;
  25. }
  26. }
  27. class Car:Vehicle
  28. {
  29. private int _rpm;
  30. public override int Speed { get => this._rpm/100; set => this._rpm = value*100; }
  31. //public void Run()//直接使用隐藏父类的方法,加关键字new即public new void Run(){}
  32. //{
  33. //}
  34. public override void Run() //重写
  35. {
  36. Console.WriteLine("Car is running");
  37. _rpm = 5000;
  38. }
  39. }
  40. class RaseCar:Car
  41. {
  42. public override void Run()
  43. {
  44. Console.WriteLine("Rase car is running!");
  45. }
  46. }
  47. }

多态

  • 基于重写机制(virtual->override)
  • 函数成员的具体行为(版本)由对象决定
    • 父类类型的变量引用一个子类类型的实例,调用一个方法,方法最后的版本是由对象决定的。
  • 回顾:C#语言的变量和对象都是有类型的,所以会有“代差”

python中是没有多态的概念的,对象有类型,变量没有类型。