[英]When I call a method, why isn't the overridden method called?
我的問題是我的方法調用函數轉到虛擬方法,而不是覆蓋的方法。 我嘗試用虛擬方法繼承該類,並且在調試時沒有什么不同。 什么東西少了?
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;
}
}
您正在創建Engine
而不是Program
的實例-您需要做的就是將Main
的第一行更改為:
Engine engine = new Program();
要使用的實現基於調用該方法的對象的執行時類型-在您現有的代碼中,只有Engine.ExecuteCommand
,因此不會調用Program
的代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.