You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让ScriptExecuter返回其派生类的方法返回值?

问题原因与解决方案

你当前输出false的核心原因是:你实例化的是基类ScriptExecuter的对象,调用ExecuteSQL时自然执行的是基类的默认实现。要获取派生类的返回值,必须让基类引用指向派生类的实例,或者直接实例化派生类,利用C#的多态特性。

方案1:直接实例化对应派生类

把Main方法里的基类实例替换成你需要的派生类实例即可,比如要执行SQL就实例化SQLExecuter:

public class Program
{
    static void Main(string[] args)
    {
        // 替换为SQLExecuter实例
        var scriptExecuter = new SQLExecuter();
        var result = scriptExecuter.ExecuteSQL("SELECT * FROM Table1");
        Console.WriteLine(result); // 输出true
    }
}

如果需要执行C#编译,就实例化CSharpCompiler:

var scriptExecuter = new CSharpCompiler();
var result = scriptExecuter.CompileCSharp("你的C#代码");
Console.WriteLine(result); // 输出true

方案2:用工厂模式动态选择派生类

如果需要根据不同的脚本类型动态切换实现,可以写一个工厂类来创建对应的派生类实例,避免硬编码:

public static class ScriptExecuterFactory
{
    public static ScriptExecuter CreateExecuter(string scriptType)
    {
        return scriptType.ToLower() switch
        {
            "sql" => new SQLExecuter(),
            "csharp" => new CSharpCompiler(),
            _ => new ScriptExecuter()
        };
    }
}

然后在Main方法中使用:

static void Main(string[] args)
{
    var scriptExecuter = ScriptExecuterFactory.CreateExecuter("sql");
    var result = scriptExecuter.ExecuteSQL("SELECT * FROM Table1");
    Console.WriteLine(result); // 输出true
}

补充说明

C#的多态特性要求:基类引用必须指向派生类对象,才能调用到派生类中重写的虚方法。你之前的代码只是创建了基类对象,所以无法触发派生类的实现。

内容的提问来源于stack exchange,提问作者Green

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 23:24:31