我有一个窗体和两个用户控件,如下所示:
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.cs
Main
中,我调用MyServerForm的构造函数:MyServerForm(ApplicationInstance application)
。我假设application
,m_app
,m_app1
,m_app2
都引用同一个示例,其中一个示例的任何更改都会导致所有其他示例的更改。但是当我改变m_app1
时,m_app2
仍然存在。
我做了一些研究,得到的答案像m_app1
和m_app
引用同一个示例,m_app2
和m_app
引用同一个示例,但m_app1
和m_app2
不直接引用对方。听起来很奇怪。所以如果我想让它们都引用一个唯一的示例。我该怎么办?
1条答案
按热度按时间egmofgnx1#
我假设应用程序,m_app,m_app1,m_app2都引用同一个示例,其中一个示例的任何更改都会导致所有其他示例的更改。
否-变量值所引用的 object 的任何修改都将通过任何变量看到。但变量本身是独立的-为其中一个变量分配不同的值对其他变量没有任何影响。
你可以这样想:如果有多个人,每个人都有自己物理地址簿,他们都有我的物理地址。如果他们中的一个人用他们的通讯录找到我的房子,并把我的前门漆成绿色,那么如果其他人用他们的通讯录找到我的房子,他们就会看到一个绿色的前门。但如果其中一个人只是改变了他们的地址簿(例如,因为我已经告诉那个人我搬家了,但没有告诉其他人),那么这不会改变其他任何人的地址簿。
请注意,这并不是Windows窗体特有的--这只是.NET使用引用类型的方式。