【问题标题】:Visual C# Delegate ArrayVisual C# 委托数组
【发布时间】:2011-08-02 06:12:16
【问题描述】:

好的。所以我想要做什么......我正在尝试将状态效果列表存储为数组中的代表。状态将像口袋妖怪游戏中的状态一样。(眩晕让你失去一回合等)。

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

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

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

它抱怨这不是一个静态属性,我想知道我应该如何继续。

谢谢大家。

【问题讨论】:

  • 不清楚您要做什么,您要在哪里声明statusesstatus 类型是什么,或者Chara 类型是什么。我还强烈建议您开始遵循 .NET 命名约定。

标签: c# arrays static delegates


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 我知道 - 但是委托只能与静态方法一起使用,不是吗?
    • 你也可以分配一个代表,或者在我的情况下Action&lt;T&gt;就地。在我上面的代码中,我正在创建一个具有单个参数的方法,pokemonInstance。该方法会将生命值降低 10。我将该方法分配给 para 静态变量。
    猜你喜欢
    • 2010-09-20
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-10
    相关资源
    最近更新 更多