Зачем хранить две переменные для одного контента в C # UWP? - PullRequest
0 голосов
/ 07 июня 2018

В C # я замечаю, что многие кодеры делают что-то вроде следующего:

class X
{
    private int test_;

    public int test
    {
        get { return test_; }
        set { if (test_ != value) test_ = value; }
    }
}

Мой вопрос: зачем хранить закрытую и открытую переменную для одного и того же содержимого?

Почемуразве мы не сделали этого вместо этого?

class X
{
    public int test
    {
        get; set;
    }
}

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

Ответы [ 2 ]

0 голосов
/ 07 июня 2018

Код:

class X
{
    public int test
    {
        get; set;
    }
}

... является прямым эквивалентом этого:

class X
{
    private int test_;

    public int test
    {
        get { return test_; }
        set { test_ = value; }
    }
}

Первый пример - это автоматически реализуемое свойство.Компилятор C # автоматически создает второй пример при компиляции.

Теперь код, который вы представили первым, имел следующую строку:

set { if (test_ != value) test_ = value; }

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

Когда вы используете вспомогательное поле для своих свойств, вы можете ввести конкретные правила, которым должен следовать ваш код.

Например, вы можетеВы хотите установить громкость звука в музыкальном приложении, поэтому ваш код может выглядеть следующим образом:

public class Music
{
    private int _volume = 7;

    public int Volume
    {
        get { return _volume; }
        set
        {
            if (value >= 0 && value <= 10)
            {
                _volume = value;
            }
        }
    }
}

Обычно ваша личная переменная поля обычно имеет логику, подобную этой.

0 голосов
/ 07 июня 2018

Это не две переменные.Один - это поле, а другой - собственность.Свойство является необязательным скрытым методом получения и установки.

На самом деле ваше предложение решения является частью языка, называемого автоматически реализуемыми свойствами: https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/auto-implemented-properties

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...