Я задаю этот вопрос с характеристиками в качестве основной проблемы. Но я хотел бы узнать другие возможные преимущества/недостатки для обоих подходов.Доступ к переменной элемента напрямую через свойство
Вопрос: Поскольку свойства преобразуются в методы в IL, может ли быть значительное снижение производительности, если свойства вызываются вместо прямого доступа к полям (из класса)?
Я проектирую класс преобразования (PersonalizationConstructor), цель которого - «создать объект домена» из IDataReader.
Я собираюсь принять IDataReader в конструкторе этого класса (PersonalizationConstructor) и защитить виртуальные свойства для возврата данных из набора записей IDataReader; например:
protected virtual string ProductFilterCriteria
{
get;
set;
}
Я мог бы иметь 15+ объектов в одном классе для этой реализации. Таким образом, свойство может быть переопределено, чтобы проверить, имеет ли набор записей «XXX» поле перед доступом из набора записей (я не хочу, чтобы такая проверка выполнялась по умолчанию для всех).
Хорошо ли иметь 15+ виртуальных объектов в классе для реализации вышеприведенного случая?
Не обращайте внимания на IDataReader. Моя главная забота:
Поскольку свойства преобразуются в методы в IL, мог быть значительным производительность штрафом, если свойств называется вместо доступа к полям непосредственно (внутри класса)?
Я бы иметь что-то вроде этого:
class MainSite
{
protected virtual string ProductFilterCriteria
{
get
{
return _source["ProductFilterCriteria"];
}
}
protected virtual string Abc
{
get
{
return _source["Abc"];
}
}
protected virtual string Def
{
get
{
return _source["Def"];
}
}
..... many properties
}
class VirtualSite : MainSite
{
protected override string ProductFilterCriteria
{
get
{
return null;
}
}
}
В этом случае они являются виртуальными свойствами, что означает, что они не могут быть оптимизированы (кроме случаев, когда тип известен как тот, который запечатывает свойство). –
@ Jon: Спасибо, ты абсолютно прав. Но даже тогда выигрыш в производительности от перехода от свойства к полю ничтожен во всех, кроме очень небольшого числа сценариев. – Abel