关于参考变量和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。 希望这能对您有所帮助。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...