首页新闻找找看学习计划

C#类对象的初始化问题

0
悬赏园豆:30 [已解决问题] 解决于 2012-08-16 17:04

 

  1. public partial class UsersBLL
  2.  {
  3.        private static readonly UsersBLL instance=new UsersBLL();
  4.     private readonly IUsers dal=DataAccess.CreateUsers();
  5.     public UsersBLL()
  6.     {}
  7.     public static UsersBLL Current
  8.     {
  9.        get
  10.        {
  11.            return instance;
  12.        }
  13.     }
…………
在其它代码段中用到UsersBLL类,形式如下UserBll.Current.Add方法。(UserBLL有Add方法),Add方法中要用到dal(第4行代码那个dal),结果总是出现错误,dal为null错误。在4行设置断点,UserBll.Current使用的话,断点也执行不到。但如果UserBll userBll=new UserBll(),这样的话,第4行的断点能执行到。求大侠帮我分析一下,UserBll.Current这么用的话, 对象初始化的顺序。为什么没有执行第4行断点。
hanshuhe的主页 hanshuhe | 初学一级 | 园豆:6
提问于:2012-07-12 15:03
< >
分享
最佳答案
0

看你的代码没有错误,也不是执行顺序问题。

UserBll.Current是什么,是一个UserBll的实例,即UsersBLL instance=new UsersBLL();

看到new了,也就是所有的成员初始化完成了。

dal 不是没有初始化,是初始化为null了,应该是 DataAccess.CreateUsers()方法返回了null。

 

收获园豆:10
Qlin | 老鸟四级 |园豆:2403 | 2012-07-12 16:47
其他回答(4)
0

没可能的,其他地方错了。

收获园豆:5
水牛刀刀 | 园豆:6350 (大侠五级) | 2012-07-12 15:11
0

执行顺序当然是从上到下执行的,因为private readonly IUsers dal=DataAccess.CreateUsers(); 它不是静态的吧,你调用 Current方法,当然要实例化一下了

收获园豆:5
ocean397 | 园豆:144 (初学一级) | 2012-07-12 15:53
0

在构造函数中初始化dal对象,因为你这样写,当走到第四行代码的时候,DataAccess对象还不存在,所以就报错了。

收获园豆:5
code先生-null | 园豆:307 (菜鸟二级) | 2012-07-12 16:14
0

DataAccess.CreateUsers(); 楼主贴下这个方法的代码

收获园豆:5
chenping2008 | 园豆:9836 (大侠五级) | 2012-07-13 10:02

顺便也贴下Add方法

支持(0) 反对(0) chenping2008 | 园豆:9836 (大侠五级) | 2012-07-13 10:05
 1 class UsersBLL
 2     {
 3         private static readonly UsersBLL instance = new UsersBLL();
 4         private readonly string str =DataAccess.CreateUsers();
 5         public UsersBLL()
 6         { }
 7         public static UsersBLL Current
 8         {
 9             get
10             {
11                 return instance;
12             }
13         }
14 
15         public string Add()
16         {
17             return str;
18         }
19     }
20 
21     class DataAccess
22     {
23         public static string CreateUsers()
24         {
25             return "ping";
26         }
27     }
1 Console.WriteLine(UsersBLL.Current.Add());
支持(0) 反对(0) chenping2008 | 园豆:9836 (大侠五级) | 2012-07-13 10:15

@chenping2008: 

输出的结果是  ping

支持(0) 反对(0) chenping2008 | 园豆:9836 (大侠五级) | 2012-07-13 10:16
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册