【问题标题】:Share a variable between two classes在两个类之间共享一个变量
【发布时间】:2015-03-05 15:20:04
【问题描述】:

我只有 1 个项目中有两个不同的 .cs 窗口。每个人都运行我程序的不同部分。但是现在我需要在 Form.cs 中使用 mainwindow.cs 的变量 (i)。这个变量一直在变化。 我该怎么做?

主窗口.CS

   namespace samples
   {
     using System.IO;
     ........
     public partial class MainWindow : Window
       {
       float i;     
       }
    }   

FORM1.CS

    namespace samples
    {
    public partial class Form1 : Form
    {
        public Form1()
        {
        InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
        ....
        chart1.Series["Pakistan"].Points.AddXY(i, j);
        }
    }
    }

【问题讨论】:

  • 通过全局修饰符分享它,即static?
  • 要么将其设为静态,要么将其传递给 Form1 的构造函数
  • 您可以在另一个表单中保留一个表单的引用。
  • 它们是两个独立的应用程序吗? MainWindow 是否有 Form1 的实例?

标签: c# visual-studio-2010 variables


【解决方案1】:

如果你声明你的变量时没有访问修饰符,那么它是隐式的private,因此只能在声明它的类中访问(在这种情况下为MainWindow)。您可以添加访问修饰符:

internal float i;

这将允许您从程序集中的其他类访问i,例如Form1

有关访问修饰符的更多信息,请参阅 MSDN:https://msdn.microsoft.com/en-us/library/wxh6fsc7.aspx

不过,您几乎不应该在类之外公开像 i 这样的字段;相反,您想要做的是使用属性:

private float i;

public float I
{
    get { return i; }
    set { i = value; }
}

更好的是,您可以使用自动实现的属性,因此您甚至不需要支持字段 (i):

public float I { get; set; }

公开属性而不是字段更好的原因有很多。 Here is one source on the topic(以VB为中心,但原理应该一样)。

附录:请考虑变量的正确命名约定。 i 不是你的变量的好名字。

【讨论】:

    【解决方案2】:

    如果您不提及,您的默认访问修饰符是私有的。公开

    public float i {get; set;}  
    

    【讨论】: