виртуальные свойства и ленивая загрузка - PullRequest
7 голосов
/ 12 января 2012

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

Мой вопрос не о NHibernate, а как вы можете использовать виртуальные свойства для достижения отложенной загрузки?Есть ли какие-то скрытые поведения в отношении виртуальных свойств, которых я не знаю?

Ответы [ 2 ]

9 голосов
/ 12 января 2012

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

2 голосов
/ 12 января 2012

За virtual участниками скрытого поведения нет. За исключением того факта, что они могут быть переопределены в дочерних классах.

Ленивая загрузка может быть достигнута с использованием класса Lazy<T>. В котором T является типом, который будет загружен. Это неявно преобразуется в T.

Или, если вы хотите вручную настроить свойства так, чтобы они вели себя лениво, вы можете использовать что-то вроде этого:

private SomeType _someProperty = null;
public override SomeType SomeProperty
{
    get
    {
        if (_someProperty == null)
        {
            // Load _someProperty
        }
        return _someProperty;
    }
}

С помощью ValueTypes вы можете сделать их Nullable<T>. Или введите bool независимо от того, загружены они или нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...