C#:引用在另一个类中创建的类的实例

时间:2018-07-25 08:10:39

标签: c# class instances

我需要C#的帮助。

假设我有3个班级。 MainMenu,Form1和Data。 我已经在MainMenu中创建了一个Data实例(称为StoreData)。

public partial class MainMenu : Form
    {
        public Data StoreData = new Data();
    }

我希望能够在Form1中访问此StoreData实例。如何引用或导入它?

4 个答案:

答案 0 :(得分:3)

您可以

  • 在静态类StoreData中将MyAWesomeStatic设为静态,然后调用MyAWesomeStatic.StoreData甚至在MainMenu类中自行调用。
  • 创建时通过构造函数或属性将StoreData的引用传递给Form1
  • 或将MainMenu的引用传递给form1,并在需要时调用mainMenu.StoreData

但是,另一种选择可能是全部使用Dependency Injection (DI)Loosely Couple。有一个 Singleton 实例,并将内存中的 Data Store 作为某种 Service 传递(这是很酷的孩子可能会做的事情)。

更新

  

抱歉,仍处于学习C#的初期。这是什么意思   使一个类静态化?

鉴于您当前的知识水平和万事俱备,我认为最简单的方法可能只是通过参考

public class Form1
{

    public Data StoreData { get; set; }
}

...

var form = new Form1();
form.StoreData = StoreData;
form.Show();

答案 1 :(得分:1)

如果您要引用另一类中的一个类(并且不想做任何事情static),组成是一种选择。

您要引用MainFormForm1的字段,因此要引用MainForm本身。因此,您需要在Form1类型的MainForm中创建字段:

public class Form1 : Form
{
    ...
    public MainForm mf { get; set; }
    ...
}

现在,您可以在StordeData中用mf.StordeData访问Form1

答案 2 :(得分:0)

您可以在一个静态类中将StoreData设为静态,如下所示:

public static class Form1
{ 
    public static Data StoreData { get; set; }
}

答案 3 :(得分:0)

假设您的StoreData类具有一个属性

public class StoreData
        {
            public int MyProperty { get; set; } 
        }

在您的mainform.cs中添加静态属性,并将值分配给MyProperty = 1

    public partial class MainMenu : Form
        {
            public static StoreData Data { get; set; }   //static property

            private void MainMenu_Load(object sender, EventArgs e)
            {
                Data = new StoreData { MyProperty = 1 };
            }
        }

并在Form1.cs之内访问您的StoreData属性,例如

public partial class Form1 : Form
    {

        private void Form1_Load(object sender, EventArgs e)
        {
            var id = MainMenu.Data.MyProperty;
        }

    }

尝试一次可能对您有帮助

结果:

enter image description here