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

2019-06-28 01:36发布

我事先什么将可能是基于范围相当容易/快速回答道歉,但我到处找和我惊讶地没有拿出答案。

我创建了一个名为战士类约100类变量。 我需要用户输入信息,并逐步建立了几个不同的类表格的过程中当兵对象(因为有太多的数据收集只有一个)。

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

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

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

我应该指出,所有的表格(Form1.cs中,Form2.cs ......)的共享相同的命名空间。

提前致谢

编辑:下面的工作所有的解决方案所以它只是取决于你最喜欢哪一个。 感谢您的反馈意见。 一个小纸条,确保你所有的类修饰符的公共包括您的自定义类(在我的情况Soldier.cs)。

Answer 1:

你需要声明Soldier在例如在较高的范围。

这样做的一个办法是宣布它里面Form1上 ,然后将它传递到窗体2,依此类推。

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;
}

前一种方法是确定的,如果有一个唯一的序列的形式; 后者是更好,如果差的形式可以在不同的时间被使用或重新考虑。



Answer 2:

您应该创建一个公开士兵在窗体上的公共属性。 然后,您可以从其他形式的访问此属性。

// ...

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;

    // ...
  }
}


Answer 3:

您也可以让士兵一个静态变量:

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

代码在其他形式:

Form1.soldier.name ="";


文章来源: Visual C# - Access instance of object created in one class in another