Visual C# – 访问另一个类中创建的对象实例

我提前道歉,基于范围可能是一个相当容易/快速的答案,但我到处都看,并且很惊讶没有得到答案。

我创建了一个名为Soldier的类,它有大约100个类变量。 我需要一个用户输入信息,并在几个不同的类窗体的过程中逐步构建一个Solider对象(因为只有一个上面收集的数据太多)。

我在Form1.cs中创建一个Soldier(tempSoldier)的(空)实例,并开始设置我从用户收集的对象的类变量。

private void button1_Click(object sender, EventArgs e) { Soldier tempSoldier = new Soldier(); tempSoldier.surname = textbox1.text; } 

我的问题:如何从其他类(Form2.cs,Form3.cs …)中的Form1.cs访问对象实例(tempSoldier)?

我应该提到所有的Form(Form1.cs,Form2.cs ……)共享相同的命名空间。

提前致谢

编辑:以下所有解决方案都有效,所以它取决于您最喜欢哪一个。 感谢您的反馈意见。 一点注意事项,请确保将所有类修饰符设为Public包括您的自定义类(在我的例子中为Soldier.cs)。

您需要在更高的范围内声明Soldier实例。

这样做的一种方法是在Form1中声明它,然后将其传递给Form2 ,依此类推。

 public class Form1 { private Soldier tempSoldier = new Soldier(); private void button1_Click(object sender, EventArgs e) { tempSoldier = new Soldier(); tempSoldier.surname = textbox1.text; } private void GotoNextStep() { // pass the existing instance to the next form Form2 form2 = new Form2(tempSoldier); // display form 2 ... } } 

另一种可能性是在所有表单都可以访问的类中使用单例变量。

 public class MyAppManager { private static readonly Soldier _soldier = new Solider(); public static Soldier SoldierInstance { get { return _soldier; } } } private void button1_Click(object sender, EventArgs e) { MyAppManager.SoldierInstnace.surname = textbox1.text; } 

如果表格有明确的序列,那么前一种方法是可以的; 如果差异表格可以在不同时间使用或重新访问,后者会更好。

您应该在表单上创建一个暴露士兵的公共属性。 然后,您可以从其他表单访问此属性。

 // ... public Soldier Soldier { get; private set; } private void button1_Click(object sender, EventArgs e) { Soldier tempSoldier = new Soldier(); tempSoldier.surname = textbox1.Text; this.Soldier = tempSoldier; } // ... 

您的Form2类看起来像这样:

 public partial class Form2 { private Form1 form1; public Form2(Form1 form1) { this.form1 = form1; this.InitializeComponent(); } public void DoStuffWithForm1() { // ... string surname = this.form1.Soldier.surname; // ... } } 

您还可以使士兵成为静态变量:

 public static Soldier soldier {get;set;} private void button1_Click(object sender, EventArgs e) { soldier = new Soldier(); soldier.surname = textbox1.text; } 

其他forms的代码:

 Form1.soldier.name ="";