避免缓加载时因违反惯例导致的空引用!

 

文章来源 :IT工程技术网  http://www.systhinker.com/html/58/n-11658.html

有时候我们在获取对象的某个值时,我们想使用的时候在去加载,而不是一开始就伴随这对象的创建而创建。我们在类的内部使用lazy load的时候,一般是使用时去call一个方法让它真正的加载,但是方法用起来稍微有点别扭,毕竟xxxx().xxx有点难看,我们在.net里面一般都用属性来做这个工作了。

就如我下边的这个例子

代码
public   class  persion
{
    
private   string  _name;
    
private   string  _age;
    
    
private   string  Name
    {
        
get
        {
            
if  (_name  ==   null )
            {
                
// lazy load _name value
            }
        }
    }
    
    
private   string  Age
    {
        
get {
            
if  (_age  ==   null ) {
                
// lazy load _age value                
            }
        }
    }
    
    
public   void  PrintName()
    {
        
// use _name is error
    }
    
    
public   void  PrintAge()
    {
        
// use _age is error
    }
    
}

 我们假设向要缓加载的是Name和Age两个数据值(并且这两个数据我并不想对外公开),当然你可以认为那是从很遥远的火星拿下了的,速度并没有你想的那么快。我们真正用到的时候在去那。这个没有什么问题,也解决了我们缓加载的问题,但是如果你不小心用了一下_name或者_age那么.net在运行时就会告诉你空引用异常了。当然这个可以经过测试来检查这个问题。现在我们想要讨论的是如何避免这个问题。 

自己闭上眼想一想如果是你你会如何避免这个问题。

 我 的 答 案 如 下

下边是我经常使用的一种方案。

代码
public   class  persion
{
    DataProvide _dataProvide  =   new  DataProvide();
    
    
public   void  PrintName()
    {
        
// call _dataProvide.Name
    }
    
    
public   void  PrintAge()
    {
        
// call _dataProvide.Age
    }
    
    
private   class  DataProvide
    {
        
private   string  _name;
        
private   string  _age;

        
public   string  Name
        {
            
get
            {
                
if  (_name  ==   null )
                {
                    
// lazy load _name value
                }
            }
        }

        
public   string  Age
        {
            
get {
                
if  (_age  ==   null ) {
                    
// lazy load _age value                
                }
            }
        }
    }
    
}
文章来源 :IT工程技术网  http://www.systhinker.com/html/58/n-11658.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值