如何解决关于参考变量和C#中变量的传递的简单问题
| 我正在创建一个WindowForm应用程序,现在我有一个小问题。我有一个注册表,要求用户输入用户名,手机号码和密码。注册后,信息将被写入文本文件。用户成功登录后,将向用户显示一个登录表单,我将从用户实体类创建一个用户对象,并将其传递给我的主表单,并显示隐藏该登录表单的主表单。在一段时间不活动之后,主表单将被隐藏,并且登录表单将显示给用户。public class User
{
private string userName;
private string mobileNumber;
public User(string uName,string mnumber)
{
userName = uName;
mobileNumber = mnumber;
}
public string MobileNumber
{
get
{
return mobileNumber;
}
set
{
mobileNumber = value;
}
}
public string UserName
{
get
{
return userName;
}
set
{
userName = value;
}
}
}
public partial class Login : Form
{
//Other codes
//Upon successful login
User user = new user(username,mobilenumber);
//Hide the Login Form
this.Hide();
//display the main Form
MainForm main = new MainForm(ref user,this);
main.Show();
}
public partial class MainForm : Form
{
private User user;
private Login login;
Public MainForm(ref User user,Login login)
{
this.user = user;
this.login = login;
}
}
表单将切换经常登录-> MainForm->登录。这是我的问题。 ,如上所示,当我将用户对象作为参考变量传递给MainForm时,对MainForm类中的用户对象所做的任何更改也将反映在登录类中,但MainForm中的用户对象将没有最新值,并且它是第一次创建mainForm对象时的值。为什么会这样,为什么在MainForm中所做的更改反映在登录表单中而不反映在MainForm类中?在此先感谢您提供的任何帮助。干杯。
解决方法
你做不到没有诸如引用字段或引用变量之类的东西。只需有一个在用户更改时触发的事件,或者让调用代码轮询表单用户变量中的更改。没有其他方法可以做到。
, 使用the2ѭ关键字在这里没有区别。如果是同一对象,则对它的任何更改都会在所有地方反映出来。
, 首先,您不是User对象,而是
ValueType
,因此在这种特殊情况下不需要ref
修饰符。仅当使用“按值传递”语义(用户定义为“ 5”)时,才需要这样做。
其次,我不确定您是否以正确的方式处理您的问题。您应该考虑将代码重构为类似于以下内容的代码:
应用程序从MainForm开始:
Uppon表单加载(在第一次呈现主表单时发生)创建用户登录并将其显示为对话框(您将希望使用单独的方法进行此操作,以便可以在步骤4中重用它)。在此登录表单上提供一个选项来注册新用户。
成功登录后,仅将用户存储在主窗体中,然后关闭“登录”窗体(不要将其隐藏,关闭并处置,仅在需要时创建一个新窗体)。对用户的任何后续编辑都应映射到该变量。
如果闲置时间到期(通过事件处理程序),请取消当前用户并再次显示用户登录名并重做步骤2。
希望这能对您有所帮助。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。