Я задаю этот вопрос с производительностью в качестве основного вопроса. Но я хотел бы знать другие возможные преимущества / недостатки для обоих подходов.
Вопрос: поскольку свойства преобразуются в методы в 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;
}
}
}