Выбор главного свойства с параметрами
При анализе ограничений, которые C# налагает на индексаторы, возникает два
вопроса:
284
Глава.10 .Свойства
Что если язык, на котором написан тип, позволяет разработчику определить
несколько свойств с параметрами?
Как использовать этот тип в программе на C#?
Ответ: в этом типе надо выбрать один из методов среди свойств с параметра-
ми и сделать его свойством по умолчанию, применив к самому классу экземпляр
System.Reflection.DefaultMemberAttribute
. Кстати,
DefaultMemberAttribute
можно применять к классам, структурам или интерфейсам. В С# при компиляции
типа, определяющего свойства с параметрами, компилятор автоматически при-
меняет к определяющему типу экземпляр атрибута
DefaultMember
и учитывает
его при использовании атрибута
IndexerName
. Конструктор этого атрибута задает
имя, которое будет назначено свойству с параметрами, выбранному как свойство
по умолчанию для этого типа.
Итак, в C# при определении типа, у которого есть свойство с параметрами, но
нет атрибута
IndexerName
, атрибут
DefaultMember
, задающий определяющий тип,
будет указывать имя
Item
. Если применить к свойству с параметрами атрибут
IndexerName
, то атрибут
DefaultMember
определяющего типа будет указывать на
строку, заданную атрибутом
IndexerName
. Помните: C# не будет компилировать
код, содержащий разноименные свойства с параметрами.
В программах на языке, поддерживающем несколько свойств с параметрами,
нужно выбрать один метод свойства и пометить его атрибутом
DefaultMember
. Это
будет единственное свойство с параметрами, доступное программам на C#.
Производительность при вызове
методов доступа
В случае простых методов доступа
get
и
set
JIT-компилятор
подставляет
(inlines)
код метода доступа внутрь кода вызываемого метода, поэтому характерного сниже-
ния производительности работы программы, проявляющегося при использовании
свойств вместо полей, не наблюдается. Подстановка подразумевает компиляцию
кода метода (или, в данном случае, метода доступа) непосредственно вместе с ко-
дом вызывающего метода. Это избавляет от дополнительной нагрузки, связанной
с вызовом во время выполнения, но за счет увеличения объема кода откомпилиро-
ванного метода. Поскольку методы доступа свойств обычно содержат мало кода,
их подстановка может приводить к сокращению общего объема машинного кода,
а значит, к повышению скорости выполнения.
Заметьте, что при отладке JIT-компилятор не подставляет методы свойств, по-
тому что подставленный код сложнее отлаживать. Это означает, что эффективность
доступа к свойству в готовой версии программы выше, чем в отладочной. Что же
касается полей, то скорость доступа к ним одинакова в обеих версиях.
Do'stlaringiz bilan baham: |