Почему я объявляю личную переменную, чтобы затем создавать ее экземпляр? - PullRequest
0 голосов
/ 22 октября 2019

В настоящее время я следую вместе с этим курсом, и в уроке 05.1 мы создаем приватную переменную, которая принимает созданный класс Player в качестве типа данных (?).

using GameEngine;
using System.Windows.Forms;

namespace UserInterface
{
    public partial class DragonlightRPG : Form
    {
        #region Member Variables

        private Player _player;

        #endregion Member Variables

        #region Constructors

        public DragonlightRPG()
        {
            InitializeComponent();

            // Instantiate a new Player class.
            _player = new Player();

            // Assign value(s) to the player object properties.
            _player.CurrentHealth = 100;
            _player.Gold = 25;
            _player.MaximumHealth = 100;
            _player.PlayerExperience = 0;
            _player.PlayerLevel = 1;

            // Get the value(s) of the properties from the _player object, and
            // assign them to the text property of the labels on the form.
            lblExperience.Text = _player.PlayerExperience.ToString();
            lblGold.Text = _player.Gold.ToString();
            lblHitPoints.Text = _player.CurrentHealth.ToString();
            lblLevel.Text = _player.PlayerLevel.ToString();
        }

        #endregion Constructors
    }
}

Если в закрытой переменной _player в качестве типа данных в строке 10 задан класс Player, почему тогда мы создаем новый экземпляр этого класса в строке 21 и присваиваем его уже предопределенной переменной _player? Есть ли какая-то причина, почему это сделано так? Могу ли я сделать что-то вроде;Player player = new Player(); при достижении того же результата?

1 Ответ

4 голосов
/ 22 октября 2019

Разница здесь в объявлении переменной по сравнению с созданием объекта, который будет присвоен этой переменной.

В определении класса первая ссылка на _player просто устанавливает объявление переменной типа «Player» - она ​​не создает экземпляр объекта Player:

private Player _player;

Метод 'DragonlightRPG ()', наоборот, выполняет выполнение объекта с помощью 'new Player ();'вызов, присвоение созданного объекта приватному члену _player:

_player = new Player();

Первый устанавливает переменную, второй создает объект, который будет удерживаться в переменной.

Вы могли бы создать экземпляр объекта раньше;тем не менее, самым общим руководством было бы создать объект немедленно, когда он необходим, использовать его, а затем уничтожить. Кроме того, специфика любого конкретного варианта использования может диктовать, что конкретный объект может быть создан только в определенные моменты времени, или должна создаваться только при вызове определенного метода. Такие решения часто зависят от индивидуальных требований.

...