Предоставление объектов-членов как свойств или методов в .NET

В .NET, если класс содержит член, который является объектом класса, должен ли этот член быть представлен как свойство или как метод?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
15
0
6 215
7
Перейти к ответу Данный вопрос помечен как решенный

Ответы 7

Имущество. Недвижимость - это просто «дешевый» метод. Получение или установка ссылки на объект довольно дешево.

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

Хм? Набор свойств может вызвать сериализацию объекта и вызвать обновление базы данных или вызов веб-службы. Как это по дешевке?

Franci Penov 03.10.2008 01:05

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

Rodrick Chapman 06.01.2010 14:44

Свойства читают и присваивают значения экземплярам внутри класса.

Методы что-то делают с данными, присвоенными классу.

Это не имеет отношения к делу.

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

Это должен быть метод, если он выполняет какое-либо действие с объектом.

Ответ принят как подходящий

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

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

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

David Klempfner 20.03.2018 08:29

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

От MSDN:

Class library designers often must decide between implementing a class member as a property or a method. In general, methods represent actions and properties represent data. Use the following guidelines to help you choose between these options.

  • Use a property when the member is a logical data member. In the following member declarations, Name is a property because it is a logical member of the class.

    public string Name
    get 
    {
        return name;
    }
    set 
    {
        name = value;
    }
    
  • Use a method when:

    • The operation is a conversion, such as Object.ToString.
    • The operation is expensive enough that you want to communicate to the user that they should consider caching the result.
    • Obtaining a property value using the get accessor would have an observable side effect.
    • Calling the member twice in succession produces different results.
    • The order of execution is important. Note that a type's properties should be able to be set and retrieved in any order.
    • The member is static but returns a value that can be changed.
    • The member returns an array. Properties that return arrays can be very misleading. Usually it is necessary to return a copy of the internal array so that the user cannot change internal state. This, coupled with the fact that a user can easily assume it is an indexed property, leads to inefficient code. In the following code example, each call to the Methods property creates a copy of the array. As a result, 2n+1 copies of the array will be created in the following loop.

      Type type = // Get a type.
      for (int i = 0; i < type.Methods.Length; i++)
      {
         if (type.Methods[i].Name.Equals ("text"))
         {
            // Perform some operation.
         }
      }
      

The following example illustrates the correct use of properties and methods.

    class Connection
    {
       // The following three members should be properties
       // because they can be set in any order.
       string DNSName {get{};set{};}
       string UserName {get{};set{};}
       string Password {get{};set{};}

       // The following member should be a method
       // because the order of execution is important.
       // This method cannot be executed until after the 
       // properties have been set.
       bool Execute ();
    }

Обзор

Обычно в свойствах хранятся данные для объекта, такие как Имя, а методы - это действия, которые объект может быть запрошен, такие как Переехать или Шоу. Иногда не очевидно, какие члены класса должны быть свойствами, а какие - методами - метод Предмет класса коллекции (VB) хранит и извлекает данные и может быть реализован как индексируемое свойство. С другой стороны, было бы разумно реализовать Предмет как метод.

Синтаксис

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

Если вы реализуете член класса как свойство, вы должны изменить его значение следующим образом:

ThisObject.ThisProperty (Индекс) = Новое значение

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

ThisObject.ThisProperty (индекс, новое значение)

Ошибки

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

Раньше я не понимал, как использовать свойство и метод. Но теперь я использую это правило согласно Рекомендации MSDN:

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

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