Автоматическое отслеживание переменных

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Автоматическое отслеживание переменных

Сообщение rhymer 20 авг 2018, 14:09

У меня есть несколько переменных, причём значения этих переменных взаимосвязаны. К примеру, переменная AC = proficiency + armour + dexterity;

Есть ли возможность автоматически обновлять значение переменной AC, если одна из переменных (proficiency, armour или dexterity) была изменена, не запихивая при этом формулу в public void Update()?
И где в соседнем скрипте прописать AСtext.text = "Your AC is " + Attributes.instance.AC; чтобы текст автоматически обновлялся всякий раз, когда меняется переменная, а не в каждом кадре?
Аватара пользователя
rhymer
UNец
 
Сообщения: 24
Зарегистрирован: 17 авг 2018, 23:48

Re: Автоматическое отслеживание переменных

Сообщение Tolking 20 авг 2018, 14:40

Ковчег построил любитель, профессионалы построили Титаник.
Аватара пользователя
Tolking
Адепт
 
Сообщения: 2714
Зарегистрирован: 08 июн 2009, 18:22
Откуда: Тула

Re: Автоматическое отслеживание переменных

Сообщение rhymer 20 авг 2018, 15:24

Не совсем понимаю, как это работает. То есть, для каждой переменной я должен создать новую переменную, которая бы обновлялась? Не могли бы вы показать, как это работает на данном конкретном примере?
Аватара пользователя
rhymer
UNец
 
Сообщения: 24
Зарегистрирован: 17 авг 2018, 23:48

Re: Автоматическое отслеживание переменных

Сообщение 1max1 20 авг 2018, 15:57

тебе достаточно создать свойство для переменной и когда через свойство ты будешь менять значение тебе достаточно в блоке set указать все необходимые действия которые должны будут выполнены помимо установки самого значения
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Автоматическое отслеживание переменных

Сообщение Tolking 20 авг 2018, 16:45

Сеттеры и геттеры это не новые переменные.

public float proficiency;
public float armour;
public float dexterity;
public float AC {get{return proficiency + armour + dexterity}}

или

float _proficiency;
float _armour;
float _dexterity;
float AC

public float proficiency{get{return _proficiency}
set{AC=_proficiency + _armour + _dexterity;}};
public float armour{get{return _armour}
set{AC=_proficiency +_armour + _dexterity}};
public float dexterity{get{return _dexterity}
set{AC=_proficiency + _armour + _dexterity}};
Ковчег построил любитель, профессионалы построили Титаник.
Аватара пользователя
Tolking
Адепт
 
Сообщения: 2714
Зарегистрирован: 08 июн 2009, 18:22
Откуда: Тула

Re: Автоматическое отслеживание переменных

Сообщение rhymer 20 авг 2018, 18:26

Спасибо! Запись public int AC { get { return proficiency + armour + dexterity; } } действительно работает - если я обновляю одну из переменных через, к примеру, нажатие кнопки, AC пересчитывается автоматически.

Вот только что делать с текстом? Значение переменной public Text AСtext я задаю через инспектор, перетащив туда заранее созданный текст (как и собирался). Но как автоматически обновлять этот текст при изменении переменных, ведь мы меняем не переменную AСtext, а её компонент AСtext.text?
Аватара пользователя
rhymer
UNец
 
Сообщения: 24
Зарегистрирован: 17 авг 2018, 23:48

Re: Автоматическое отслеживание переменных

Сообщение Tolking 20 авг 2018, 18:41

Это можно сделать, но я бы оставил как есть... :D

float _proficiency;
float _armour;
float _dexterity;
public float AC {get{return proficiency + armour + dexterity}}

public float proficiency{get{return _proficiency}
set{_proficiency =value; AСtext.text = "Your AC is " + AC; }};

public float armour{get{return _armour}
set{_armour =value; AСtext.text = "Your AC is " + AC; }};

public float dexterity{get{return _dexterity}
set{_dexterity=value; AСtext.text = "Your AC is " + AC; }};

Только AC не пересчитывается в данном случае, она вычисляется в момент обращения...
Ковчег построил любитель, профессионалы построили Титаник.
Аватара пользователя
Tolking
Адепт
 
Сообщения: 2714
Зарегистрирован: 08 июн 2009, 18:22
Откуда: Тула

Re: Автоматическое отслеживание переменных

Сообщение rhymer 20 авг 2018, 20:01

Tolking писал(а):Это можно сделать, но я бы оставил как есть... :D


Не совсем понял, что вы имели в виду? Я же так и оставил, только тип переменных поменял - у меня это целые числа (int, а не float). Я, к сожалению, не понимаю смысла всех остальных манипуляций.

Спасибо за пример с текстом. Правда, насколько я могу судить, текст будет во всех трёх случаях выводить значение AC, а не armour, dexterity и proficiency соответственно, но это несложно поправить. А вот что меня озадачивает, так это то, зачем мы сначала объявляем переменные armour, dexterity и proficiency, а потом присваиваем им значения, если можно сделать это в одну строку, как мы делали с AC. Или нельзя? Если нельзя, то почему?
Аватара пользователя
rhymer
UNец
 
Сообщения: 24
Зарегистрирован: 17 авг 2018, 23:48

Re: Автоматическое отслеживание переменных

Сообщение Tolking 20 авг 2018, 20:51

У AC нет присвоения. Только получение.
Ковчег построил любитель, профессионалы построили Титаник.
Аватара пользователя
Tolking
Адепт
 
Сообщения: 2714
Зарегистрирован: 08 июн 2009, 18:22
Откуда: Тула

Re: Автоматическое отслеживание переменных

Сообщение rhymer 20 авг 2018, 21:23

Кстати, насчёт текста. Попытался добавить это решение в свой код, и снова понял, что ничего не понял. Ну, или понял неправильно.
Чтобы текст автоматически изменялся при изменении переменных, которые он должен выводить на экран, изменения этого текста нужно выводить в блоке set свойств данной переменной? А если он выводит несколько переменных? А если он в совсем другом скрипте прописан? И что означает нижнее подчёркивание перед именем переменной? То есть, у нас две переменные: _dexterity и dexterity? И второй мы присваиваем значение первой? А для чего? И что будет, если после переменной я напишу {get;set;} (Вроде этого: public int Charisma { get; set; })?
Можно растолковать это подробно по полочкам - я раньше никогда с этим не сталкивался, а все статьи и видеоуроки, которые я находил, оставляют подобные нюансы без внимания, видимо, считая их чем-то, понятным по умолчанию.
Аватара пользователя
rhymer
UNец
 
Сообщения: 24
Зарегистрирован: 17 авг 2018, 23:48

Re: Автоматическое отслеживание переменных

Сообщение Anonymyx 20 авг 2018, 23:44

get и set - это обычные методы. На уровне компилятора их нет.
Нужны они для контроля доступа к переменной. Т.е. есть некая закрытая (приватная), доступная только нам переменная, и через свойства этой переменной мы указываем поведение когда хотят обратиться к закрытой переменной, или когда ее хотят изменить. Получается, есть закрытая переменная, и свойство этой переменной.
Компилятор преобразовывает свойство в обычные методы.

Запись
Синтаксис:
Используется csharp
int _x; // private переменная.
public int X {get {return _x;} set {_x = value; print(_x);}} // свойство.


будет преобразовано примерно в это:

Синтаксис:
Используется csharp
int _x;

public void Get__X()
{
return _x;
}

public void Set__X(int value)
{
_x = value;
print(_x);
}


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

А запись
public int x {get; set;} - это автоматически реализуемое свойство, т.е. то самое закрытое поле компилятор создаст за нас, автоматически.

Т.е. эта запись преобразуется в это:

Синтаксис:
Используется csharp
int __x; //Эту переменную создает компилятор.

public void Get__X()
{
return __x;
}

public void Set__X(int value)
{
__x = value;
}
Аватара пользователя
Anonymyx
Адепт
 
Сообщения: 1973
Зарегистрирован: 05 апр 2015, 15:55

Re: Автоматическое отслеживание переменных

Сообщение rhymer 21 авг 2018, 02:24

Спасибо за попытку объяснить, но теперь мне стало ещё непонятнее. Чтобы прояснить ситуацию, я скажу, что впервые открыл Visual Studio четыре дня назад, до этого момента же панически боялся программирования, а любой код был для меня не понятнее иероглифов. Я бесконечно благодарен всем за то, что вы со мной возитесь и не отправляете читать мануалы для чайников (которые я честно пытался читать, но заканчивалось это головной болью и чувством полной беспомощности). Возможно, когда тебе за тридцать, начинать учиться чему-то новому не стоит, поскольку мозг усваивает информацию куда хуже, чем в 17, но раз уж я взялся за это, то хочу довести до конца.

Я уже разобрался с тем, что такое переменные и какие они бывают,чем отличаются Awake, Start и OnEnable, как работают элементы интерфейса и как выводить текст через скрипт в заранее прописанном поле. Однако я ещё очень много не понимаю, а воспринимать информацию способен только на примерах конкретных задач (чтобы получилось А, нужно сделать Б) на уровне "Если мы поставим перед переменной слово public, то сможем обратиться к ней из других скриптов. После оператора if условие выполнения действия надо писать в круглых скобочках, а то, что получится - в фигурных".
В моём представлении скрипт - это такая штука, в начале которого мы объявляем переменные, а потом идут функции (такие штуки с круглыми скобочками после названий и фигурными скобочками после круглых, которые работают как уравнения, то есть выполняют математические операции или алгоритмы), которые позволяют нам эти переменные как-то обрабатывать.

Поэтому фразы вроде " это обычные методы. На уровне компилятора их нет" вызывают у меня оцепенение. Я вроде бы понимаю каждое слово в отдельности, но вместе они не складываются для меня в осмысленное предложение.

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

Возвращаясь к get и set, вот то, что я, как мне кажется, понял:

get нужен для того, чтобы получить данные какой-либо переменной, не используя Update. То есть, если мы объявим какую-нибудь переменную и после её названия припишем { get { return название другой переменной или арифметические действия с другими переменными; } }, то эта самая переменная будет автоматически равна актуальному значению этой самой другой переменной или результату арифметических действий с этими переменными, не важно, как именно мы эти самые переменные изменили. При этом исходная переменная (название которой идёт до фигурных скобочек) исчезнет из инспектора. Но как это работает не с переменными, а с компонентами (например, с конкретным компонентом text класса Text, а точнее, с компонентом конкретного объекта класса Text) я так и не понял. То есть, как заставить его выводить всегда актуальное значение переменной, указанной в фигурных скобочках?

Для чего нужен set, я так и не понял. Нет, исходя из названия, логично, что нужен он, чтобы устанавливать новое значение какой-либо переменной. Но чем это будет отличаться от, скажем int = 7, я не понимаю. Из вашего примера
Синтаксис:
Используется csharp
int _x; // private переменная.
public int X {get {return _x;} set {_x = value; print(_x);}} // свойство.

я понял следующее:
1)int _x; Мы объявили приватную переменную _x (то есть, обратиться к ней мы можем только внутри этого скрипта).
2)public int X Мы объявили публичную переменную X (на которую теперь можно ссылаться из других скриптов).
3){get {return _x;} мы получаем значение приватной переменной _x.
4)set {_x = value; мы делаем что-то непонятное. Исходя из названия, мы приравняли публичную переменную X к приватной переменной _x.
5)print(_x);}} мы печатаем значение переменной _x.
Таким образом, интерпретируя данный пример под мою ситуацию, получаю следующее:
Синтаксис:
Используется csharp
int _dexterity; // объявили статичную переменную. Кстати, почему с нижним подчёркиванием?
public int Dexterity {get {return _dexterity;} set {_dexterity = value; BattleController.DexterityText.text = "ваша ловкость равна " + _dexterity;}} // где BattleController - скрипт, в котором я задал переменную класса Text, назвал её DexterityText и в инспекторе перетащил на неё конкретный текстовый объект. Вот только проблема в том, что это не работает, поскольку DexterityText, чтобы на него можно было ссылаться из других скриптов, должен быть static, а если он staticб то он пропадает из инспектора и текстовый объект ему не назначить...

Если я правильно понял, то в результате мы получим надпись "Ваша ловкость равна X", где X будет автоматически обновляться при изменении переменной Dexterity (а значит, и _dexterity, ведь изменяя одну, мы автоматически изменяем и другую).
Вопрос в том, что делать, если нужно вывести актуальные значения нескольких переменных, например "ваш уровень владения этим видом доспехов = " + proficiency + "; Ваша броня даёт вам защиту, равную " + armour + ", а ваша ловкость равна " + dexterity;
И можно ли печатать этот текст из скрипта BattleController, к которому привязан конкретный текстовый объект, а не из скрипта Attributes, в котором хранятся значения характеристик proficiency, armour и dexterity и формулы, на них основанные, например AC = proficiency + armour + dexterity;
Аватара пользователя
rhymer
UNец
 
Сообщения: 24
Зарегистрирован: 17 авг 2018, 23:48

Re: Автоматическое отслеживание переменных

Сообщение Bill Gates 21 авг 2018, 07:52

То, что вы пытаетесь сделать называется реактивным программированием. Я бы не стал пихать этот подход в таком виде. Вообще всю логику можно проследить с помощью дебаггера. Учитесь им пользоваться.

Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

/// <summary>
/// Класс, хранящий атрибуты
/// </summary>
/// <remarks>
/// В наборе свойств в сеттерах вызывается событие изменение значения атрибута, на которое
/// мы подписываемся в Start'е. В методе Attributes_OnParamChanged мы реагируем на
/// изменения и пересчитываем AC, которое в свою очередь (в своем сеттере) также вызывает
/// специальное событие OnACChanged.
///
/// Главный плюс в таком подходе заключается в том, что мы не нагружаем сеттеры побочной логикой
/// типа изменения текста в UI (ужос так делать), а оставляем это дело более высокоуровневым объектам (MainController).
/// Как они будут реагировать на изменения свойств Attributes — по барабану. Главное, что класс сообщил об изменении
/// своих свойств. Таким образом, мы следуем принципу единственной ответственности (англ. The Single Responsibility Principle, SRP),
/// согласно которому каждый объект должен иметь одну ответственность и эта ответственность должна быть
/// полностью инкапсулирована в класс (вики), а не изменять вдобавок еще какой-то текст в UI.
/// </remarks>
public class Attributes : MonoBehaviour
{
    /// <summary>
    /// Событие, возникающее при изменении <see cref="Proficiency"/>, <see cref="Armour"/> и
    /// <see cref="Dexterity"/>
    /// </summary>
    public System.Action OnAttributesChanged;

    private void DoAttributesChanged ()
    {
        if (OnAttributesChanged != null)
            OnAttributesChanged ();
    }

    /// <summary>
    /// Событие, возникающее при пересчете <see cref="AC"/>
    /// </summary>
    public System.Action OnACChanged;

    private void DoACChanged ()
    {
        if (OnACChanged != null)
            OnACChanged ();
    }

    [SerializeField]
    private float proficiency;

    public float Proficiency
    {
        get
        {
            return proficiency;
        }

        set
        {
            proficiency = value;

            //Вызываем событие изменения атрибута
            DoAttributesChanged ();
        }
    }

    [SerializeField]
    private float armour;

    public float Armour
    {
        get
        {
            return armour;
        }

        set
        {
            armour = value;

            //Вызываем событие изменения атрибута
            DoAttributesChanged ();
        }
    }

    [SerializeField]
    private float dexterity;

    public float Dexterity
    {
        get
        {
            return dexterity;
        }

        set
        {
            dexterity = value;

            //Вызываем событие изменения атрибута
            DoAttributesChanged ();
        }
    }

    private float ac;

    public float AC
    {
        get
        {
            return ac;
        }

        private set
        {
            ac = value;

            //Вызываем событие изменения атрибута
            DoACChanged ();
        }
    }

    private void Attributes_OnParamChanged ()
    {
        AC = proficiency + armour + dexterity;
    }

    void Start ()
    {
        //Подписываемся на событие изменения атрибута, чтобы пересчитать AC
        OnAttributesChanged += Attributes_OnParamChanged;
    }
}

 

Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

/// <summary>
/// Класс, отвечающий за UI
/// </summary>
/// <remarks>
/// Опять же — класс UI отвечает только за интерфейс и более ничего не делает.
/// </remarks>
public class UI : MonoBehaviour
{
    /// <summary>
    /// Ссылка на компонент текста для отображения AC
    /// </summary>
    [SerializeField]
    private Text ac;

    /// <summary>
    /// Изменить значение AC
    /// </summary>
    /// <param name="value">Значение</param>
    public void SetACText (float value)
    {
        ac.text = string.Format ("Your AC is {0}", value.ToString ());
    }
}
 

Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MainController : MonoBehaviour
{
    [SerializeField]
    private Attributes attributes;

    [SerializeField]
    private UI ui;

    private void Attributes_OnACChanged ()
    {
        //Обновляем текст в UI
        ui.SetACText (attributes.AC);
    }

    void Start ()
    {
        //Подписываемся на событие изменения AC
        attributes.OnACChanged += Attributes_OnACChanged;
    }
}
 
Bill Gates
UNIт
 
Сообщения: 127
Зарегистрирован: 16 июл 2015, 11:27

Re: Автоматическое отслеживание переменных

Сообщение 1max1 21 авг 2018, 08:09

Господи боже мой, ты там под лсд что ли? Столько воды вылил просто не о чем...
Свойства это просто обертка вокруг переменной, только и всего...
Синтаксис:
Используется csharp
class XXX : MonoBehaviour
{
    [SerializeField] Text yourAC;
    [SerializeField] Text yourArmour;
    [SerializeField] Text yourDexterity;
    [SerializeField] Text yourProficiency;

    float AC;
    float armour;
    float dexterity;
    float proficiency;

    public float GetAC()
    {
        return armour + dexterity + proficiency;
    }

    public float GetArmour()
    {
        return armour;
    }

    public float GetDexterity()
    {
        return dexterity;
    }

    public float GetProficiency()
    {
        return proficiency;
    }

    public void SetArmour(float newArmour)
    {
        // Если новое значение не равно текущему
        if (armour != newArmour)
        {
            // Присвоили новое значение
            armour = newArmour;

            // Вывели новое значение армы
            yourArmour.text = armour.ToString();

            // Вывели новое значение АС, ибо арма изменилась, надо пересчитать
            yourAC.text = GetAC().ToString();
        }
    }

    // Аналогично SetArmour
    public void SetDexterity(float newDexterity)
    {
        if (dexterity != newDexterity)
        {
            dexterity = newDexterity;
            yourDexterity.text = dexterity.ToString();
            yourAC.text = GetAC().ToString();
        }
    }

    // Аналогично SetArmour
    public void SetProficiency(float newProficiency)
    {
        if (proficiency != newProficiency)
        {
            proficiency = newProficiency;
            yourProficiency.text = proficiency.ToString();
            yourAC.text = GetAC().ToString();
        }
    }
}
 


А вот тоже самое только через свойства:

Синтаксис:
Используется csharp
class XXX : MonoBehaviour
{
    [SerializeField] Text yourAC;
    [SerializeField] Text yourArmour;
    [SerializeField] Text yourDexterity;
    [SerializeField] Text yourProficiency;

    float _AC;
    float _armour;
    float _dexterity;
    float _proficiency;

    public float AC
    {
        get
        {
            return _armour + _dexterity + _proficiency;
        }
    }

    public float armour
    {
        get
        {
            return _armour;
        }

        set
        {
            // Если новое значение не равно текущему
            if (_armour != value)
            {
                // Присвоили новое значение
                _armour = value;

                // Вывели новое значение армы
                yourArmour.text = _armour.ToString();

                // Вывели новое значение АС, ибо арма изменилась, надо пересчитать
                yourAC.text = AC.ToString();
            }
        }
    }

    // Аналогично armour
    public float dexterity
    {
        get
        {
            return _dexterity;
        }

        set
        {
            if (_dexterity != value)
            {
                _dexterity = value;
                yourDexterity.text = _dexterity.ToString();
                yourAC.text = AC.ToString();
            }
        }
    }

    // Аналогично armour
    public float proficiency
    {
        get
        {
            return _proficiency;
        }

        set
        {
            if (_proficiency != value)
            {
                _proficiency = value;
                yourProficiency.text = _proficiency.ToString();
                yourAC.text = AC.ToString();
            }
        }
    }
}


p.s.
4)set {_x = value; мы делаем что-то непонятное. Исходя из названия, мы приравняли публичную переменную X к приватной переменной _x.

value это такой неявный параметр, когда ты хочешь присвоить значение через свойство.
К примеру, через метод, присвоение нового значение армы будет так SetArmour(45);
Через свойства, так: armour = 45; (value здесь автоматически принимает значение 45)
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Автоматическое отслеживание переменных

Сообщение Bill Gates 21 авг 2018, 09:59

1max1 писал(а):Господи боже мой, ты там под лсд что ли? Столько воды вылил просто не о чем...
Свойства это просто обертка вокруг переменной, только и всего...
Синтаксис:
Используется csharp
class XXX : MonoBehaviour
{
    [SerializeField] Text yourAC;
    [SerializeField] Text yourArmour;
    [SerializeField] Text yourDexterity;
    [SerializeField] Text yourProficiency;

    float AC;
    float armour;
    float dexterity;
    float proficiency;

    public float GetAC()
    {
        return armour + dexterity + proficiency;
    }

    public float GetArmour()
    {
        return armour;
    }

    public float GetDexterity()
    {
        return dexterity;
    }

    public float GetProficiency()
    {
        return proficiency;
    }

    public void SetArmour(float newArmour)
    {
        // Если новое значение не равно текущему
        if (armour != newArmour)
        {
            // Присвоили новое значение
            armour = newArmour;

            // Вывели новое значение армы
            yourArmour.text = armour.ToString();

            // Вывели новое значение АС, ибо арма изменилась, надо пересчитать
            yourAC.text = GetAC().ToString();
        }
    }

    // Аналогично SetArmour
    public void SetDexterity(float newDexterity)
    {
        if (dexterity != newDexterity)
        {
            dexterity = newDexterity;
            yourDexterity.text = dexterity.ToString();
            yourAC.text = GetAC().ToString();
        }
    }

    // Аналогично SetArmour
    public void SetProficiency(float newProficiency)
    {
        if (proficiency != newProficiency)
        {
            proficiency = newProficiency;
            yourProficiency.text = proficiency.ToString();
            yourAC.text = GetAC().ToString();
        }
    }
}
 


А вот тоже самое только через свойства:

Синтаксис:
Используется csharp
class XXX : MonoBehaviour
{
    [SerializeField] Text yourAC;
    [SerializeField] Text yourArmour;
    [SerializeField] Text yourDexterity;
    [SerializeField] Text yourProficiency;

    float _AC;
    float _armour;
    float _dexterity;
    float _proficiency;

    public float AC
    {
        get
        {
            return _armour + _dexterity + _proficiency;
        }
    }

    public float armour
    {
        get
        {
            return _armour;
        }

        set
        {
            // Если новое значение не равно текущему
            if (_armour != value)
            {
                // Присвоили новое значение
                _armour = value;

                // Вывели новое значение армы
                yourArmour.text = _armour.ToString();

                // Вывели новое значение АС, ибо арма изменилась, надо пересчитать
                yourAC.text = AC.ToString();
            }
        }
    }

    // Аналогично armour
    public float dexterity
    {
        get
        {
            return _dexterity;
        }

        set
        {
            if (_dexterity != value)
            {
                _dexterity = value;
                yourDexterity.text = _dexterity.ToString();
                yourAC.text = AC.ToString();
            }
        }
    }

    // Аналогично armour
    public float proficiency
    {
        get
        {
            return _proficiency;
        }

        set
        {
            if (_proficiency != value)
            {
                _proficiency = value;
                yourProficiency.text = _proficiency.ToString();
                yourAC.text = AC.ToString();
            }
        }
    }
}


p.s.
4)set {_x = value; мы делаем что-то непонятное. Исходя из названия, мы приравняли публичную переменную X к приватной переменной _x.

value это такой неявный параметр, когда ты хочешь присвоить значение через свойство.
К примеру, через метод, присвоение нового значение армы будет так SetArmour(45);
Через свойства, так: armour = 45; (value здесь автоматически принимает значение 45)


Человек пытается разобраться и своими словами донести мысли о вещах, которые не до конца понимает. Ничего страшного, если по началу будет такой вот поток сознания. Зачем так реагировать? Себя вспомните. Главное, что человек развивается.
Bill Gates
UNIт
 
Сообщения: 127
Зарегистрирован: 16 июл 2015, 11:27

След.

Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 32


cron