Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当我调用一个方法时,为什么不是';是否调用了被重写的方法?_C#_Visual Studio_Class_Oop - Fatal编程技术网

C# 当我调用一个方法时,为什么不是';是否调用了被重写的方法?

C# 当我调用一个方法时,为什么不是';是否调用了被重写的方法?,c#,visual-studio,class,oop,C#,Visual Studio,Class,Oop,我的问题是,我的方法调用函数指向虚拟方法,而不是被重写的方法。我试图用虚拟方法继承这个类,当我调试它时,它没有什么不同。少了什么 public class Engine { protected virtual void ExecuteCommand(string[] inputParams) { switch (inputParams[0]) { case "status": this.Pri

我的问题是,我的方法调用函数指向虚拟方法,而不是被重写的方法。我试图用虚拟方法继承这个类,当我调试它时,它没有什么不同。少了什么

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 engine = new Program();

要使用的实现基于调用方法的对象的执行时间类型-在现有代码中,这是唯一的
引擎。ExecuteCommand
,因此不会调用
程序中的代码。

您正在创建
引擎的实例,不是
程序
-只需将
Main的第一行
更改为:

Engine engine = new Program();
要使用的实现基于调用方法的对象的执行时间类型-在现有代码中,这是唯一的
引擎.ExecuteCommand
,因此不会调用
程序中的代码