好。所以我想做什么...我试图将状态效果列表存储为数组中的委托。状态将像口袋妖怪游戏中的状态一样......(Stun让你失去转弯等)。
到目前为止,我有这个......
public class Statuses : Chara{
public static void para(){
this.health -= 10;
}
}
status[] statuses = new status[]{
new status(Statuses.para)
};
它抱怨这不是一个静态属性,我想知道我该怎么做。
谢谢你。
答案 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 keyword和its 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
};