新的开发工具: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 = 100
Console.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中是没有多态的概念的,对象有类型,变量没有类型。