Когда использовать Свойства и Методы?

У меня нет синтаксиса, чтобы сделать, это корректно с LKM бесцеремонно, но этой статьей предоставляет хороший обзор того, что необходимо было бы сделать: http://www.linuxjournal.com/article/4378

Вы могли также просто исправить функцию sys_open. Это запускает на строке 1084 из file/open.c с Linux 2.6.26.

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

12
задан Matt 20 April 2013 в 07:13
поделиться

13 ответов

Это чистый синтаксический сахар. На задней панели он скомпилирован в простые методы получения и установки.

Используйте его из-за соглашения, и он выглядит лучше.

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

12
ответ дан 2 December 2019 в 03:54
поделиться

Подумайте об этом так: Свойства инкапсулируют ваши поля (обычно помечаются как частные) и в то же время предоставляют вашим коллегам-разработчикам возможность установить или получить значение поля. При желании вы даже можете выполнить обычную проверку с помощью метода set свойства.

0
ответ дан 2 December 2019 в 03:54
поделиться

Также обратите внимание, что свойства доступны через отражение. Хотя методы тоже есть, свойства представляют "что-то интересное" в объекте. Если вы пытаетесь отобразить сетку свойств объекта - скажем, что-то вроде конструктора форм Visual Studio - тогда вы можете использовать отражение для запроса свойств класса, перебора каждого свойства и опроса объекта на предмет его соответствия. значение.

0
ответ дан 2 December 2019 в 03:54
поделиться

Компилятор фактически испускает методы get_MyProperty и set_MyProperty для каждого определяемого вами свойства.

0
ответ дан 2 December 2019 в 03:54
поделиться

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

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

Я лично считаю, что это основная идея свойств.

2
ответ дан 2 December 2019 в 03:54
поделиться

свойства - это методы получения / установки

2
ответ дан 2 December 2019 в 03:54
поделиться

Рекомендуем прочитать Выбор между свойствами и методами . Он содержит много информации о рекомендациях по проектированию .NET.

4
ответ дан 2 December 2019 в 03:54
поделиться

Прежде всего, соглашение об именах: используйте PascalCase для имени свойства, как и в случае с методами. Также свойства не должны содержать очень сложных операций. Это следует делать в методах.

В ООП вы описываете объект как имеющий атрибуты и функциональные возможности. Вы делаете это при разработке класса. Подумайте о создании автомобиля. Примерами функциональности может быть возможность куда-то переехать или активировать дворники. В вашем классе это будут методы. Атрибутом будет количество пассажиров в машине в данный момент. Без свойств у вас было бы два способа реализовать атрибут:

Сделать переменную общедоступной:

// class Car
public int passengerCount = 4;

// calling code
int count = myCar.passengerCount;

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

Второй вариант - это один вид, используемый, например, в Java, где у вас нет свойств, как в C #:

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

// class Car
public int GetPassengerCount()
{
   // perform some operation
   int result = CountAllPassengers();

   // return the result
   return result;
}

// calling code
int count = myCar.GetPassengerCount();

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

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

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

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

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

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

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

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

2
ответ дан 2 December 2019 в 03:54
поделиться

Свойства просто сэкономят вам время от написания шаблона, который идет вместе с методами get / set.

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

Это удобно, потому что вы можете создать методы get / set для вещей, которые вы не хотите отображать, и свойства для тех, которые вы хотите отображать. .

1
ответ дан 2 December 2019 в 03:54
поделиться

Я всегда думаю, что свойства - это существительные класса, а в качестве методов - глаголы ...

2
ответ дан 2 December 2019 в 03:54
поделиться

Ответам на подобные вопросы посвящена целая книга: Framework Design Guidelines от Addison-Wesley. См. Раздел 5.1.3 для советов о том, когда выбирать свойство или метод.

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

6
ответ дан 2 December 2019 в 03:54
поделиться

Свойства - это методы получения / установки; просто он формализует их в единую концепцию (для чтения и записи), разрешая (например) метаданные для свойства , а не отдельных элементов. Например:

[XmlAttribute("foo")]
public string Name {get;set;}

Это пара методов get / set, но дополнительные метаданные применяются к обоим. Это также, IMO, просто упрощает использование:

someObj.Name = "Fred"; // clearly a "set"
DateTime dob = someObj.DateOfBirth; // clearly a "get"

Мы не дублировали тот факт, что мы выполняем get / set.

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

7
ответ дан 2 December 2019 в 03:54
поделиться

Хотя это не жесткое и быстрое правило, и, как отмечали другие, свойства реализуются как пары Get / Set "за кулисами" '- обычно свойства инкапсулируют / защищают данные состояния, тогда как методы (также известные как процедуры или функции) работают и дают результат этой работы.

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

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

Напротив, методы преобразуют состояние и порождают новые значения внутренне и внешне без необходимости повторения результатов.

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

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

Напротив, методы трансформируют состояние и порождают новые значения внутренне и внешне без необходимости повторения результатов.

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

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

Напротив, методы трансформируют состояние и порождают новые значения внутренне и внешне без необходимости повторения результатов.

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

создание резервного хранилища по запросу и способ избежать избыточных вызовов настроек).

Напротив, методы преобразуют состояние и порождают новые значения внутренне и внешне без обязательно повторяемых результатов.

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

создание резервного хранилища по запросу и способ избежать избыточных вызовов настроек).

Напротив, методы преобразуют состояние и порождают новые значения внутренне и внешне без обязательно повторяемых результатов.

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

0
ответ дан 2 December 2019 в 03:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: