代码之家  ›  专栏  ›  技术社区  ›  Lars Holdgaard

委托和调用列表

  •  6
  • Lars Holdgaard  · 技术社区  · 14 年前

    我正在ASP.NET中创建一个更小的RPG游戏。在这个游戏中,我有一个项目架构,每个项目都有一些方法。例如,所有项应共享一个方法,如“ 下降 ", " 检查 “和” 使用 ". 一些项必须用如下方法扩展 操作 ", " 计算 “等等。

    到目前为止,我已经创建了以下对象GameActionList:

    public delegate void MyDelegate();
    
    public class GameActionList
    {
        public List<MyDelegate> Items = new List<MyDelegate>();
    
        public void Add(MyDelegate del)
        {
            Items.Add(del);
        }
    
        public void CallDelegates()
        {
            foreach (MyDelegate myDelegate in Items)
            {
                myDelegate();
            }
        }
    }
    

    我有一个BaseItem类,它有这个GameActionList。BaseItem类中的get属性如下:

        public GameActionList Actions 
        { 
            get
            {
                GameActionList actions = new GameActionList();
                actions.Add(this.Drop);
                actions.Add(this.Examine);
                return actions;
            }
        }
    

    这很好,但是。。。我有些问题!

    我的问题

    我需要一个更通用的游戏操作列表。我不仅要有一个空的列表,还要有一些函数。。另外,我需要有参数和没有参数的方法。

    例如: 下降 方法将需要一个Player对象,以便他可以删除该项。这个 检查 方法将需要返回描述项的字符串。

    另外,我需要一些在初始化GameActionList时不知道的数据:我在调用方法时首先知道这些数据。。。

    所以我有两个问题:

    1. 如何扩展GameActionList,使其包含一个空洞和函数的列表,并且它们都可以有参数或没有。。(这是否有意义??)
    2. 我怎样才能在周期的后期给方法提供一些数据,比如调用时?

    也。。。这可能是一个非常愚蠢的方法,所以如果你有更优雅的解决方案。。我已经准备好听了 !

    谢谢。。。! 拉尔斯

    1 回复  |  直到 11 年前
        1
  •  7
  •   TalentTuner    14 年前

    你很可能需要行动,Func委托

    Func

    Action