懒加载(Lazy load)   转载

示例代码:
public class Shop : Lintop.eWorld.Facade.FacadeBase
    {
        private Tfs_System _DaShop;
        protected Tfs_System DaShop
        {
            get
            {
                if (_DaShop == null)
                {
                    _DaShop = new Tfs_System();
                    _DaShop.ReferenceTransactionFrom(Transaction);
                    if (_shopId != 0)
                    {
                        _DaShop.SelectByPk(_shopId);
                    }
                    else
                    {
                        throw new NotSupportedException();
                    }
                }
                return _DaShop;
            }
        }

        int _shopId;

        public int ShopId
        {
            get
            {
                if (_shopId != 0)
                    return _shopId;
                return DaShop.FREESHOPID;
            }
        }

        public Shop(int shopID)
        {
            _shopId = shopID;
        }
    }

解说:
上面的代码中,Property(属性) DaShop的getter(get访问器)使用的方法是lazy load。
Lazy load的固定的模式如下:
private {type} {field};
{modifier} {type} {property}
{
    get
    {
        if ( {field} == null )
        {
            {field} = new {type}(...);
            //这里对field进行其他初始化操作
        }
        return {field};
    }
}
通常情况下{modifier}为public,但也有可能是protected或private。
{type}一般为引用类型(class),初始值为null,但也有可能是值类型(struct)。
getter内首先判断{field}是否为默认值(class 的默认值为null,struct的默认值为0),当{field}为默认值时在if内部进行初始化(加载)。
在if后面进行把{field}返回。这就是lazy load。

lazy load的优点:
1.用不到时不会加载,节省资源。
2.只在第1次使用时加载,第1次以后不会重复加载,节省资源。
3.使用者(调用property的地方)不需要考虑property的加载问题,直接使用,使用方便。

 

觉得这个蛮不错的,记录一下:)   转载的哦..

posted on 2008-12-27 22:13  Ss_Andy  阅读(759)  评论(2编辑  收藏  举报