我正在创建一个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类中?提前感谢您提供的任何帮助。欢呼声。
答案 0 :(得分:2)
你不能这样做。没有引用字段或引用变量这样的东西。只需要在用户更改时触发事件,或者调用代码轮询以更改表单的用户变量。没有其他办法可以做到。
答案 1 :(得分:1)
使用ref
关键字在这里没有区别。如果它是同一个对象,对它的任何更改都会反映在任何地方。
答案 2 :(得分:0)
首先,您的用户对象不是ValueType
,因此在此特定情况下不需要ref
修饰符。当您使用Pass By Value语义时,您只需要执行此操作,用户定义为struct
。
其次,我不确定你是以正确的方式处理你的问题。您应该考虑重构代码以使其类似于:
希望这会有所帮助,你会得到一般的想法。