C#:引用在另一个类中生成的类的实例

C#:引用在另一个类中生成的类的实例,c#,class,instances,C#,Class,Instances,我需要一些C#方面的帮助 假设我有三节课。主菜单、表格1和数据。 我在主菜单中创建了一个数据实例(引用为StoreData) public partial class MainMenu : Form { public Data StoreData = new Data(); } 我希望能够访问Form1中StoreData的此实例。如何引用或导入它?如果您想在另一个类中引用一个类(并且不想使任何内容静态),则合成是一种方法 您希望引用Form1中MainForm

我需要一些C#方面的帮助

假设我有三节课。主菜单、表格1和数据。 我在主菜单中创建了一个数据实例(引用为StoreData)

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

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

如果您想在另一个类中引用一个类(并且不想使任何内容<代码>静态),则合成是一种方法

您希望引用
Form1
MainForm
的字段,因此您希望引用
MainForm
本身。因此,您需要在
main表单的
Form1
中创建字段,类型:

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

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

中的StordeData
如果您想在另一个类中引用一个类(并且不想使任何内容
静态
),则组合是一种方法

您希望引用
Form1
MainForm
的字段,因此您希望引用
MainForm
本身。因此,您需要在
main表单的
Form1
中创建字段,类型:

public class Form1 : Form
{
    ...
    public MainForm mf { get; set; }
    ...
}
现在,您可以使用
mf.StordeData
Form1
中访问
StordeData

,您可以

  • 使
    StoreData
    static您可以


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

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

      可以在静态类中使StoreData成为静态的,如下所示:

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

      假设您的
      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;
              }
      
          }
      
      试试看,也许对你有帮助

      结果:


      假设您的
      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;
              }
      
          }
      
      试试看,也许对你有帮助

      结果:



      也许您可以将数据设置为类主菜单的静态成员?请将您的问题扩展到Form1是如何使用/相关的?Polly,他们为什么要将其设置为静态?这意味着,如果MainMenu有两个实例,它们将引用同一个StoreData对象。如果有对MainMenu对象的引用,则可以执行类似myMainMenuForm.StoreData的操作。否则,如果MainMenu创建了Form1,您可以像new Form1(this.Data)一样将其传递给构造函数
      StoreData
      是公共的,因此只要您有对
      Main菜单
      实例的引用,您也可以引用该属性?e、 g.
      myMainMenu.StoreData
      在您给出的示例中,您正在为实例变量创建一个默认值,但从未实例化该类(因此没有您可以访问其变量的实例)。创建一个
      main菜单
      ——例如
      main菜单mmenu=newmain菜单()
      然后访问它的
      StoreData
      参数(
      mmenu.StoreData
      )。也许你可以将数据设置为类主菜单的静态成员?你可以扩展你的问题以包括Form1是如何使用/相关的吗?@Polly,他们为什么要将其设置为静态的?这意味着,如果MainMenu有两个实例,它们将引用同一个StoreData对象。如果有对MainMenu对象的引用,则可以执行类似myMainMenuForm.StoreData的操作。否则,如果MainMenu创建了Form1,您可以像new Form1(this.Data)一样将其传递给构造函数
      StoreData
      是公共的,因此只要您有对
      Main菜单
      实例的引用,您也可以引用该属性?e、 g.
      myMainMenu.StoreData
      在您给出的示例中,您正在为实例变量创建一个默认值,但从未实例化该类(因此没有您可以访问其变量的实例)。创建一个
      main菜单
      ——例如
      main菜单mmenu=newmain菜单()
      然后访问其
      StoreData
      参数(
      mmenu.StoreData
      )。您的建议没有足够的上下文。如果其他类在其他地方使用/引用
      MainForm
      ,该怎么办?这些语义做出了一定的假设。可能是错的。我应该补充一句,可能是对的。我喜欢构图法,只是需要确保它在正确的时间使用。你是在没有足够的上下文的情况下提出这一点的。如果其他类在其他地方使用/引用
      MainForm
      ,该怎么办?这些语义做出了一定的假设。可能是错的。我应该补充一句,可能是对的。我喜欢作文法,只是需要确保它在正确的时间使用。对不起,还是在学习C#的开始阶段。使一个类保持静态意味着什么?对不起,仍然处于学习C#的开始阶段。使类保持静态意味着什么?@Kidsnd274,签出添加了结果的解决方案,可能对您有帮助:)@Kidsnd274,签出添加了结果的解决方案,可能对您有帮助:)