winforms中的对象引用

zte4gxcn  于 2023-05-07  发布在  其他
关注(0)|答案(1)|浏览(166)

我有一个窗体和两个用户控件,如下所示:

public MyServerForm(ApplicationInstance application)
{
    InitializeComponent();

    m_application = application; //Let's call this m_app

    myServerDesignerUC = new MyServerDesignerUC(m_application);
    myServerStatusUC = new MyServerStatusUC(m_application);
}
public MyServerDesignerUC(ApplicationInstance application)
{
    InitializeComponent();

    m_application = application; //Let's call this m_app1
}
public MyServerStatusUC(ApplicationInstance application)
{
    InitializeComponent();

    m_application = application; //Let's call this m_app2
    m_server = m_application.Server as StandardServer;
    m_configuration = m_application.ApplicationConfiguration;
}

m_application是每个类中声明的私有字段。在我的Program.csMain中,我调用MyServerForm的构造函数:MyServerForm(ApplicationInstance application)。我假设applicationm_appm_app1m_app2都引用同一个示例,其中一个示例的任何更改都会导致所有其他示例的更改。但是当我改变m_app1时,m_app2仍然存在。
我做了一些研究,得到的答案像m_app1m_app引用同一个示例,m_app2m_app引用同一个示例,但m_app1m_app2不直接引用对方。听起来很奇怪。所以如果我想让它们都引用一个唯一的示例。我该怎么办?

egmofgnx

egmofgnx1#

我假设应用程序,m_app,m_app1,m_app2都引用同一个示例,其中一个示例的任何更改都会导致所有其他示例的更改。
否-变量值所引用的 object 的任何修改都将通过任何变量看到。但变量本身是独立的-为其中一个变量分配不同的值对其他变量没有任何影响。
你可以这样想:如果有多个人,每个人都有自己物理地址簿,他们都有我的物理地址。如果他们中的一个人用他们的通讯录找到我的房子,并把我的前门漆成绿色,那么如果其他人用他们的通讯录找到我的房子,他们就会看到一个绿色的前门。但如果其中一个人只是改变了他们的地址簿(例如,因为我已经告诉那个人我搬家了,但没有告诉其他人),那么这不会改变其他任何人的地址簿。
请注意,这并不是Windows窗体特有的--这只是.NET使用引用类型的方式。

相关问题