Visual C # делегат массив - PullRequest
       17

Visual C # делегат массив

0 голосов
/ 02 августа 2011

Хорошо.Итак, что я хочу сделать ... Я пытаюсь сохранить список эффектов состояния в виде делегатов в массиве.Статусы будут действовать как статусы в играх про покемонов .. (Оглушение заставляет вас терять ход и т. Д.).

Пока у меня есть это ...

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

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

Жалуется на этоне будучи статическим свойством, мне было интересно, как мне поступить.

Спасибо, куча.

Ответы [ 2 ]

1 голос
/ 02 августа 2011

Ошибка компилятора, которую вы, скорее всего, получаете при компиляции класса Statuses, говорит само за себя: «Ключевое слово« this »недопустимо в статическом свойстве, статическом методе или инициализаторе статического поля». «Это» в статическом методе. Если ваша health переменная является статической, вы можете сделать это так:

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

Если health не является статическим, вы получите эту ошибку компилятора «Ссылка на объект требуется для нестатического поля, метода или свойства« Statuses.health ».

Другая ошибка заключается в том, что para - это не свойство, а метод. Так как код, который вы разместили, находится вне контекста, в нем может присутствовать множество различных ошибок.

0 голосов
/ 02 августа 2011

Проблема, на которую жалуется компилятор, заключается в том, что вы пометили метод Para как static.Затем вы пытаетесь получить доступ к свойству health текущего экземпляра, используя this, что не имеет смысла, учитывая, что содержащий метод - static.

. Вы должны прочитать о статическое ключевое слово и его использование .


Я думаю, что вы хотели создать делегат , который уменьшает здоровье экземпляравдоль линий (при условии, что у вас есть тип с именем pokemon, со свойством health):

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

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

Читайте о Действие и Анонимные методы .

...