懒加载(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的加载问题,直接使用,使用方便。
觉得这个蛮不错的,记录一下:) 转载的哦..