Почему я должен избегать использования свойств в C#?



в своей превосходной книге, CLR Via C#, Джеффри Рихтер сказал, что ему не нравятся свойства, и рекомендует не использовать их. Он дал какую-то причину, но я действительно не понимаю. Может кто-нибудь объяснить мне, почему я должен или не должен использовать свойства?
В C# 3.0, с автоматическими свойствами, это изменяется?



в качестве ссылки, я добавил мнение Джеффри Рихтера:



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



* метод свойства может вызвать исключение; доступ к полю никогда не вызывает исключения.



* свойство не может быть передано в качестве параметра out или ref методу; поле может. Для
например, следующий код не будет компилироваться:



using System;
public sealed class SomeType
{
private static String Name
{
get { return null; }
set {}
}
static void MethodWithOutParam(out String n) { n = null; }
public static void Main()
{
// For the line of code below, the C# compiler emits the following:
// error CS0206: A property or indexer may not
// be passed as an out or ref parameter
MethodWithOutParam(out Name);
}
}


* метод свойства может занять много времени для выполнения; доступ к полю всегда завершается немедленно.
Распространенная причина для использования свойств заключается в выполнении синхронизации потоков, которая
может остановить поток навсегда, и поэтому свойство не должно использоваться, если синхронизация потока
требуемый. В этой ситуации предпочтительным является метод. Кроме того, если ваш класс может быть
удаленный доступ (например, ваш класс является производным от системы.MashalByRefObject),
вызов метода свойства будет очень медленным, и поэтому метод является предпочтительным для a
свойство. На мой взгляд, классы, производные от MarshalByRefObject никогда не должны использовать
свойства.



• если вызывается несколько раз подряд, метод свойства может возвращать разные значения в каждом
время; поле возвращает одно и то же значение каждый раз. система.Класс DateTime имеет только чтение
Свойство, которое возвращает текущую дату и время. Каждый раз, когда вы запрашиваете это
свойство, оно будет возвращать другое значение. Это ошибка, и Microsoft желает, чтобы они
можно исправить класс, сделав теперь метод вместо свойства.



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



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

517   0  

Comments

    Ничего не найдено.