Visual C#委托数组

时间:2011-08-02 06:12:17

标签: c# arrays static delegates

好。所以我想做什么...我试图将状态效果列表存储为数组中的委托。状态将像口袋妖怪游戏中的状态一样......(Stun让你失去转弯等)。

到目前为止,我有这个......

public class Statuses : Chara{
        public static void para(){
            this.health -= 10;
        }
    }

     status[] statuses = new status[]{
        new status(Statuses.para)
    };

它抱怨这不是一个静态属性,我想知道我该怎么做。

谢谢你。

2 个答案:

答案 0 :(得分:1)

编译Statuses类时,您最有可能得到的编译器错误说明了一切:“关键字'this'在静态属性,静态方法或静态字段初始化程序中无效”:您不被允许在静态方法中引用“this”。如果您的health变量是静态的,您可以这样做:

private static int health;
public static void para() 
{
    health -= 10; 
}

如果health不是静态的,您将收到此编译器错误“非静态字段,方法或属性'Statuses.health'需要对象引用。

另一个错误是您的para不是属性而是方法。由于您发布的代码非常缺乏上下文,因此可能会出现许多不同的错误。

答案 1 :(得分:0)

编译器抱怨的问题是您已将方法Para标记为static。然后,您尝试使用health访问当前实例的this属性,这是没有意义的,因为包含方法是static

您应该阅读static keywordits usage


我认为你想要做的是创建一个delegate来减少实例的健康状况,假设你有一个名为pokemon的类型,其属性为health ):

public class Statuses : Chara{
    public static Action<Pokemon> para =
        (pokemonInstance) => { pokemonInstance.Health -= 10; };
}

Action<Pokemon>[] statuses = new Action<Pokemon>[]{
    Statuses.para
};

阅读Action<T>Anonymous Methods