新的开发工具:Rider Rider
java IDE:IntelliJ IDEA
www.edx.org
ECMA C#
ECMAScript ECMA-262
大纲
- 类的继承
- 类成员的“横向扩展”(成员数量增加)
- 类成员的“纵向扩展”(行为改变,版本增高)
- 类成员的隐藏(不常用)
- 重写与隐藏的发生条件:函数成员,可见(public/protected),签名一致
- 多态(polymorphism)
- 基于重写机制(virtual->override)
- 函数成员的具体行为(版本)由对象决定
- 回顾:C#语言的变量和对象都是有类型的,所以会有“代差”
隐藏与重写
java中是天然重写不需要,C#需要加关键字
virual 虚函数,名存实亡了
方法重写
namespace OverrideExample{class Program{static void Main(string[] args){Vehicle vehicle = new RaseCar();//is a 父类类型的变量来引用一个子类类型的实例 多态vehicle.Run();//Car is running 和实例类型相关 如果隐藏掉则是i'm running.}}class Vehicle{public virtual void Run(){Console.WriteLine("I'm running");}}class Car:Vehicle{public int Speed { get; set; }//public void Run()//直接使用隐藏父类的方法,加关键字new即public new void Run(){}//{//}public override void Run() //重写{Console.WriteLine("Car is running");}}class RaseCar:Car{public override void Run(){Console.WriteLine("Rase car is running!");}}}
public class Main{public static void main(String[] args){}}class Vehicle{public void run(){System.out.printIn("i'm running");}}class Car extends Vehicle{@Override //检查错误,大小写敏感public void run(){System.out.printIn{"Car is running");}}
属性重写
namespace OverrideExample{class Program{static void Main(string[] args){Vehicle vehicle = new Vehicle();vehicle.Run(); // _speed = 100Console.WriteLine(vehicle.Speed);vehicle.Speed = 10000;}}class Vehicle{private int _speed;public virtual int Speed {get { return _speed; }set {_speed = value; }}public virtual void Run(){Console.WriteLine("I'm running");_speed = 100;}}class Car:Vehicle{private int _rpm;public override int Speed { get => this._rpm/100; set => this._rpm = value*100; }//public void Run()//直接使用隐藏父类的方法,加关键字new即public new void Run(){}//{//}public override void Run() //重写{Console.WriteLine("Car is running");_rpm = 5000;}}class RaseCar:Car{public override void Run(){Console.WriteLine("Rase car is running!");}}}
多态
- 基于重写机制(virtual->override)
- 函数成员的具体行为(版本)由对象决定
- 父类类型的变量引用一个子类类型的实例,调用一个方法,方法最后的版本是由对象决定的。
- 回顾:C#语言的变量和对象都是有类型的,所以会有“代差”
python中是没有多态的概念的,对象有类型,变量没有类型。
