Вызов метода из созданного экземпляра

#c# #oop #xna

#c# #ооп #xna

Вопрос:

Первое сообщение итак, привет! (пожалуйста, поправьте меня, если я неправильно использую какой-то термин)

У меня есть экран класса, в котором я создаю экземпляр другого класса с именем Player (давайте назовем этот экземпляр Player). Теперь на экране у меня есть метод под названием ResetHUD, который я хотел бы вызвать из проигрывателя.

Как бы я это сделал? Единственный код внутри ResetHUD — это 1 строка, которая устанавливает переменную в другую переменную. Насколько я знаю, я могу использовать EventHandler (но поскольку ResetHUD не нуждается ни в каких аргументах, я думаю, что я использую это неправильно) или делегаты (которые я понятия не имею, как использовать).

Помощь приветствуется!

Комментарии:

1. пожалуйста, поместите свой код в Q, если вы можете

Ответ №1:

Похоже, у вас есть отношение сдерживания … экранный объект содержит один (или несколько?) Объекты проигрывателя.

Когда Screen создает Player, он может установить свойство для Player, указывающее родительский (создающий) экранный объект.

 class Player
{
    private Screen parentScreen;

    public Player(Screen parentScreen) { this.parentScreen = parentScreen; }

    public MyMethodThatHasToCallScreensMethod()
    {
        parentScreen.ResetHUD();
    }
}


class Screen
{
    public Player CreatePlayer()
    {
        return new Player(this);
    }
}
  

Вы также можете использовать события (события, кстати, могут иметь параметры или нет, в зависимости от того, что вам нужно).

Это мой любимый учебник по событиям и делегатам в C #. Начинается просто и выполняется на каждом шаге.

http://www.akadia.com/services/dotnet_delegates_and_events.html

Комментарии:

1. Экран содержит 1 или более игроков, да. Я думал о передаче его в качестве аргумента, но, похоже, это было бы плохой практикой или просто плохо делать это. Я прочитаю о делегатах и событиях. Спасибо!

Ответ №2:

Поместите свойство MyScreen в класс Player. Когда вы создаете класс Player, установите это свойство в свой класс screen. Теперь у вас есть ссылка на экран, который вы можете вызвать из проигрывателя.

Ответ №3:

Ну, что-то в Player должно иметь ссылку на Screen экземпляр. Опции:

  • Когда вы создаете Player , передайте this конструктору, чтобы он мог запомнить, к Screen которому он принадлежит
  • Создайте событие на Player и подпишитесь на него с Screen
  • Передайте Screen в качестве параметров по соответствующей цепочке вызовов метода (в вашей ситуации это может быть непрактично)