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

M. *_*ack 11 c# instance-variables

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

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

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

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

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

我应该提到所有表单(Form1.cs,Form2.cs ...)共享相同的名称空间.

提前致谢

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

McG*_*gle 9

您需要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 ...
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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;
}
Run Code Online (Sandbox Code Playgroud)

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


Sve*_*exo 5

您还可以将 Soldier 设置为静态变量:

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

其他形式的代码:

Form1.soldier.name ="";
Run Code Online (Sandbox Code Playgroud)