我正在ASP.NET中创建一个较小的RPG游戏。在这个游戏中,我有一个物品架构,其中每个物品都有一些方法。例如,所有项目应共享一种方法,例如“删除”,“检查”和“使用”。某些项目将必须使用“ Operate ”,“计算”等方法进行扩展。

到目前为止,我已经创建了以下对象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;
        }
    }

很好,但是...我有一些问题!

我的问题

我需要一种更通用的GameActionList。我不仅需要一个空列表,而且还需要一个函数。.此外,我需要带参数和不带参数的两种方法。

例如: Drop 方法将需要一个Player对象,因此他可以放置该物品。 检查方法将需要返回描述该项目的字符串。

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

所以我有两个问题:
  • 如何扩展GameActionList,以便它既可以包含void和函数的列表,又可以包含参数或不包含参数的列表。(而且是否有感觉?)
  • 如何在周期的后期(例如调用时)为该方法提供一些数据?

  • 另外...这可能是一种非常愚蠢的方法,因此,如果您有一些更优雅的解决方案,那么...我很乐意听到它!

    非常感谢...!
    拉尔斯

    最佳答案

    您很可能需要Action,Func代表

    Func

    Action

    关于c# - 代表名单和调用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4297453/

    10-11 22:11