C# 我可以使用我的表单作为静态的吗?

C# 我可以使用我的表单作为静态的吗?,c#,forms,object,static,C#,Forms,Object,Static,我的程序有多种形式。这些表单中的一些表单将从能够相互对话中受益匪浅,但是如果Form1创建Form2的实例,Form2就不能调用Form1,至少不是很容易 让我的表单成为静态的,这样它们就可以互相对话,而不需要在任何地方实例化这些类的对象,这可以接受吗 然而,如果Form1创建了Form2的实例,Form2就不能调用Form1,至少不是很容易 是的,它可以-只需让您的Form2实例了解Form1的实例,例如通过构造函数: // In Form1 Form2 form2 = new Form1(t

我的程序有多种形式。这些表单中的一些表单将从能够相互对话中受益匪浅,但是如果Form1创建Form2的实例,Form2就不能调用Form1,至少不是很容易

让我的表单成为静态的,这样它们就可以互相对话,而不需要在任何地方实例化这些类的对象,这可以接受吗

然而,如果Form1创建了Form2的实例,Form2就不能调用Form1,至少不是很容易

是的,它可以-只需让您的
Form2
实例了解
Form1
的实例,例如通过构造函数:

// In Form1
Form2 form2 = new Form1(this);
(请注意,如果您的类真的被称为
Form1
Form2
,那么为它们提供更具语义意义的名称是值得的。拒绝使用Visual Studio提供的任何名称:)

我强烈建议不要仅仅为了避免直接提供依赖性而使用静态

然而,如果Form1创建了Form2的实例,Form2就不能调用Form1,至少不是很容易

是的,它可以-只需让您的
Form2
实例了解
Form1
的实例,例如通过构造函数:

// In Form1
Form2 form2 = new Form1(this);
(请注意,如果您的类真的被称为
Form1
Form2
,那么为它们提供更具语义意义的名称是值得的。拒绝使用Visual Studio提供的任何名称:)


我强烈建议不要仅仅为了避免直接提供依赖关系而使用static。

我从未创建过静态表单。。通常我只是为我的表单实例创建一些全局变量


只要在.Show(表单)或.ShowDialog(表单)方法中传递调用表单,您也可以通过当前表单的.Parent属性访问其他表单。

我从未创建过静态表单。。通常我只是为我的表单实例创建一些全局变量


只要在.Show(表单)或.ShowDialog(表单)方法中传递调用表单,您也可以通过当前表单的.Parent属性访问其他表单。

更改表单2的构造函数,如下所示

public Form2(Form form1)
{
   _parentForm = form1;
}

您现在有了对form1的引用。

更改Form2的构造函数,如下所示

public Form2(Form form1)
{
   _parentForm = form1;
}

您现在有了对form1的引用。

@KarmicCoder:同意,使用静态/单例会带来很多线程安全问题。“回调”很容易在没有引用的情况下完成。使用事件。感谢您的回答。Karmic Coder,不过我希望得到更长一点的答案。@KarmicCoder:同意,使用静态/单例会带来很多线程安全问题。“回调”很容易实现,无需参考。使用一个事件。感谢你的答案,业力编码员,不过我希望答案能长一点。有好的信息。这些表格并没有命名为Form1和Form2,这是为了举例。我将努力使用所提到的建设者来实现我所需要的。良好的信息。这些表格并没有命名为Form1和Form2,这是为了举例。我将努力使用前面提到的构造函数来实现我所需要的。