三层结构的问题

来源:百度知道 编辑:UC知道 时间:2024/05/22 10:55:48
private static string user_email;//用户帐号

public string UserEmail
{
get { return user_email; }
set { user_email = value; }
}

private string user_pwd;//用户密码

public string UserPwd
{
get { return user_pwd; }
set { user_pwd = value; }
}
在另外一个层中写
string sql = "Select * from V_UserLogin Where UserEmail='"+ bol_user.UserEmail +"'and UserPwd = '"+bol_user.UserPwd +"'";
然后在登录的那个界面的后台中可以获取userpwd,但是我断点,在上面这个sql中bol_user.UserPwd 为null
然后我把private string user_pwd;//用户密码 改成静态的就可以了

大虾们能给我解释下吗?不懂为什么出现这样的情况
那怎样可以更好的解决这个问题呢

不用静态的话就会长生我说的这样的错误

userEmail为什么用静态 (解释:为了看出区别我这样做的,说明静态的就没有出现这样的错误)

可能你两处用到的bol_user不是同一个实例, 由于UserEmail访问静态成员,曾经初始化过,所以没问题,而UserPwd则没有初始化过。
*************************************
补充:如果不希望多用户登录,就都用静态,包括属性,即UserEmail和UserPwd。然后在另一个层中用bol_user的类名.访问它们即可。
如果需要多用户登录,除了可以用列表List代替这两个字段;还可以按照你的思路,实例化bol_user,但注意要从登录界面层将bol_user实例作为参数传递给你所谓的“另一个层”,当然也可以将之公开为属性,在“另一个层”中访问之。

静态成员属于类,而非静态成员属于类的实例,也就是说,对于静态成员我们可以直接用"类名.成员名"的形式来调用,而非静态成员则需通过对类实例化后来通过"实例所得的对象.成员名"进行调用.
所以要想直接调用USER类中的成员,就得把它写成公有的静态的.

private static string user_email;//用户帐号
为啥定义静态

有可能是参数传递传错了 不要用静态的 这种自定的属性类 为啥要用静态呢

应该是你付值和取值是两个实例bol_user是新的实例其属性函数值当然为null,而静态的属性是不需要实例化而可以调用的,其值就存在了!如果你不想用静态的属性,那就把你付值是的实例传递给bol_user

可能不是同一实例的原因