Winform中的C#和变量范围

在Winform应用程序中,我希望实例化类中的数据可由多个表单控件访问。

例如,如果我创建具有name属性的字符串属性的Class Foo,我想通过单击Button1来实例化Foo a = new a(),当我单击Button2时,我希望能够使用MessageBox。展(a.name)。 如果重要的话,可能有多个Foo实例。

能够以这种方式使用类实例的最佳选择是什么?

类的私有字段或属性满足要求 – 此类字段可由类的所有方法访问。

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace Test { public partial class Form1 : Form { foo a; public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { a = new foo(); a.name = "bar"; } private void button2_Click(object sender, EventArgs e) { if (a != null && a.name != null) MessageBox.Show(a.name); else MessageBox.Show(""); } } public class foo { public string name { get; set; } public foo() { } } } 

如果您希望此变量可供其他表单访问,则需要将其公开(最好作为属性) – C#winform:从其他表单访问公共属性以及静态和公共属性之间的区别

也许你只想要一个静态类

Winforms只是一些由代码支持的图形元素。 代码可以像常规的“非winform”代码一样拥有/创建对象。 适用相同的范围规则。

我的猜测,如果你的问题更多的是’我的表单如何访问在其外部定义的共享状态’? 创建一个静态类,或者在表单的类上有一个setter,其他代码可以使用它来设置此共享状态。

您创建的表单只是另一个派生自Form 。 类存在于给定的命名空间中,因此您只需要在应用程序表单共享的命名空间中创建Foo类。

如果一个类由多个表单共享,那么通常您将该类分离为一个单独的文件。

Jon Skeet [C#MVP]访客post:不适用

2:07年5月15日

re:csharp中的应用程序变量。


5月15日下午12:04,Control Freq写道:Quote:仍然是csharp的新手。 我来自C ++背景。 >在C ++中,我会在应用程序类中创建一些顶级变量。 这些是有效的全局变量,可以在整个应用程序中访问,因为应用程序对象是已知的。 >这种做法的csharp等价物是什么? 我似乎无法将变量添加到“公共类程序”类,并从其他文件访问它们。 >我可能遗漏了一些明显的东西。 基本上你需要公共静态字段(或最好是属性)。

另一种选择是单身: http : //pobox.com/~skeet/csharp/singleton.html

乔恩

如有疑问,请找到John Skeet签名的内容。 发现于: http : //bytes.com/topic/c-sharp/answers/646865-application-variables-csharp