[c#]抽象类中子类方法重写的原理

Abstract抽象类下的子类的方法重写原理:其实就是重写方法地址

假如Transportation为一个抽象类,其下的方法有Transport,方法地址为0x1001

TrainAirplane为其子类,都有重写方法Transport

Train方法地址为0x2001Airplane方法地址为0x3001 

[c#]抽象类中子类方法重写的原理

 

 

 

在实例子类并调用其方法时,实例对象是在运行时实时修改方法地址的,而不是在编译时修改。如:

 

简单编写一个抽象类Transportation

 

public abstract class Transportation
{
  public string Type{get;set;}
  public abstract void Transport();
}

 

 

Person类中有方法:

 

public void GoHome(Transportation type)
{
  //调用抽象类中的抽象方法
  type.Transport(); }

 

 

 

然后在Main实例一个Person对象,在Person对象中调用抽象方法:

 

static void Main()
{
    Person p1 = new Person();

    //使用火车回家
    p1.GoHome(“火车”);
    p1.GoHome(new Train());//此时编译时无方法地址无改变,直到运行时修改为0x2001

    //如果改为使用飞机回家
    p1.GoHome(“飞机”);
    p1.GoHome(new Airplane());//同上,运行时修改为0x3001
}

 

[c#]抽象类中子类方法重写的原理

上一篇:[原创] C# 金额大写


下一篇:API版本管理中的沟通问题