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

C#入门OOP项目:如何将方法参数作为对象引用调用对应方法

问题根因

你当前代码无法运行的核心原因是Quest方法中定义的alt1、alt2参数类型为object,C#所有类型的基类object本身没有Quest方法,自然无法直接调用。

优化后的正确实现

1. 调整Story类设计

将每个独立剧情节点的属性和行为封装,每个类实例对应一个剧情节点,直接内置跳转逻辑:

namespace Historia
{
    public class StoryNode
    {
        // 当前节点的剧情文本
        public string Content { get; set; }
        // 选1后跳转的下一个节点
        public StoryNode Option1Next { get; set; }
        // 选2后跳转的下一个节点
        public StoryNode Option2Next { get; set; }

        public void Run()
        {
            Console.WriteLine(Content);
            Console.WriteLine("请输入1或2选择对应选项:");
            string input = Console.ReadLine()?.Trim() ?? "";
            
            // 非法输入校验
            while (input != "1" && input != "2")
            {
                Console.WriteLine("输入无效,请重新输入1或2:");
                input = Console.ReadLine()?.Trim() ?? "";
            }

            // 分支跳转逻辑
            if (input == "1")
            {
                if (Option1Next != null) Option1Next.Run();
                else Console.WriteLine("当前路线已结束,游戏完成");
            }
            else
            {
                if (Option2Next != null) Option2Next.Run();
                else Console.WriteLine("当前路线已结束,游戏完成");
            }
        }
    }
}

2. 调整主程序调用逻辑

先创建所有剧情节点,再配置节点间的跳转关系,最后从起始节点启动游戏即可:

namespace Historia
{
    class Program
    {
        static void Main(string[] args)
        {
            // 创建所有剧情节点
            StoryNode startNode = new StoryNode { Content = "Welcome, are you there?" };
            StoryNode agreeNode = new StoryNode { Content = "你选择了回应,前方出现一扇铁门,要推开吗?" };
            StoryNode silentNode = new StoryNode { Content = "你选择了沉默,雾气逐渐包裹了你,你失去了意识,坏结局达成" };
            StoryNode goodEndNode = new StoryNode { Content = "你推开铁门,找到了出口,成功逃离,好结局达成" };

            // 配置节点跳转关系
            startNode.Option1Next = agreeNode;
            startNode.Option2Next = silentNode;
            agreeNode.Option1Next = goodEndNode;

            // 启动游戏
            startNode.Run();
        }
    }
}

后续开发建议

  • 可给StoryNode增加IsEnding属性,专门标记结局节点,不需要再配置跳转逻辑
  • 如果后续需要支持2个以上的选项,可把两个固定选项改为List<(string 选项文本, StoryNode 跳转节点)>类型,支持自定义选项数量
  • 剧情内容可以单独存储到JSON/CSV文件中,运行时自动加载生成节点,修改剧情不需要重新编译代码
  • 可增加存档功能,将当前玩家所处的节点序号序列化存储,读档时直接跳到对应节点继续游戏

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 21:45:02