2015-12-02 196 views
0

我的问题是,我的方法调用函数转到虚方法,而不是覆盖的方法。我试图用虚方法继承这个类,当我调试它时没有什么不同。什么不见​​了?当我调用一个方法时,为什么不调用被重写的方法?

public class Engine 
{ 
    protected virtual void ExecuteCommand(string[] inputParams) 
    { 
     switch (inputParams[0]) 
     { 
      case "status": 
       this.PrintCharactersStatus(this.characterList); 
       break; 
     } 
    } 

    protected virtual void CreateCharacter(string[] inputParams) 
    { 
    } 

    protected virtual void AddItem(string[] inputParams) 
    { 
    } 

    private void ReadUserInput() 
    { 
     string inputLine = Console.ReadLine(); 
     while (inputLine != string.Empty) 
     { 
      string[] parameters = inputLine 
       .Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); 

      ExecuteCommand(parameters); 
      inputLine = Console.ReadLine(); 
     } 
    } 
} 

public class Program : Engine 
{ 
    public static void Main() 
    { 
     Engine engine = new Engine(); 
     engine.Run(); 
    } 

    protected override void ExecuteCommand(string[] inputParams) 
    { 
     base.ExecuteCommand(inputParams); 

     switch (inputParams[0]) 
     { 
      case "create": 
       this.CreateCharacter(inputParams); 
       break; 

      case "add": 
       this.AddItem(inputParams); 
       break; 
     } 
    } 

回答

3

你正在创建的Engine一个实例,而不是Program - 所有你需要做的是改变Main第一行:

Engine engine = new Program(); 

使用的实现是基于execution-调用方法的对象的实时类型 - 在您现有的代码中,这只是Engine.ExecuteCommand,因此Program中的代码不会被调用。

相关问题