Используете ли вы Элементы данных или Общедоступные свойства внутри самого класса?

StackOverflow https://stackoverflow.com/questions/1075988

Вопрос

Если у меня есть простая настройка класса, подобная этой:

class MyClass
{
    private string _myName = string.Empty;

    public string MyName
    {
        get
        {
            return _myName;
        }
    }

    public void DoSomething()
    {
        // Get the name...
        string name = string.Empty;

        name = _myName;

        // OR

        name = MyName;

        // ...and do something with it...
    }
}

Что мне следует использовать, общедоступное свойство или элемент данных?

Очевидно, что в данном примере это не имеет значения, поскольку они оба просто ссылаются на одну и ту же переменную.Но как насчет реального использования Общедоступных объектов?

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

Я видел кое-что в другом посте о ТОМ, что НЕ нужно вкладывать много функциональности в Свойства, поскольку их изучение в отладчике может привести к неожиданным результатам.Это правда?

Это было полезно?

Решение

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

Другие советы

Я считаю, что вы должны ссылаться на собственность как на общую практику.Хотя в данном конкретном примере это действительно не имеет большого значения, средства доступа get / set предлагают возможность выполнить немного больше работы при захвате свойства.Например, многие из наших средств доступа к свойству "get" выполняют некоторый поиск в более сложной структуре данных или устанавливают значения по умолчанию, если ничего не было определено.Чтобы остальная часть класса могла воспользоваться преимуществами этой логики, у нас вошло в привычку использовать свойства.Просто чтобы нам не приходилось слишком много думать об этом, мы пытаемся обобщить практику.

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

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

Если я просто возвращаю значение внутренней переменной, я делаю переменную общедоступной - в этом нет никакого вреда.Я всегда использовал Общедоступные свойства, когда я хочу что-то сделать в ответ на просмотр или изменение значения - т. Е. Записать это в базу данных, установить что-то еще (как во второй части вашего примера).

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

Чтобы ответить на ваш вопрос, в любом случае нет ничего плохого в том, чтобы делать это - просто учитывайте потенциальные побочные эффекты.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top