代表和调用列表

时间:2010-11-28 15:20:52

标签: c# asp.net delegates invoke

我在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;
        }
    }

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

我的问题

我需要一种更通用的GameActionList方式。我需要有一个列表,不仅有空洞,还有函数。另外,我需要两个带参数的方法,没有参数。

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

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

所以我有两个问题:

  1. 你如何扩展GameActionList,所以它可以包含空洞和功能的列表,而且这些都可以有参数或者没有..(并且它甚至会让人感觉?)
  2. 如何在循环中稍后向方法提供一些数据,例如在调用时?
  3. 另外......这可能是一种非常愚蠢的方式,所以如果你有一些更优雅的解决方案..我已经准备好听到它了

    非常感谢......! 拉斯

1 个答案:

答案 0 :(得分:7)

你很可能需要Action,Func委托

Func

Action