Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Winforms中的C#和变量范围_C#_Winforms_Class_Scope - Fatal编程技术网

Winforms中的C#和变量范围

Winforms中的C#和变量范围,c#,winforms,class,scope,C#,Winforms,Class,Scope,在Winform应用程序中,我希望实例化类中的数据能够被多个表单控件访问 例如,如果我创建了一个名为name的字符串属性的类Foo,我希望通过单击Button1来实例化Foo a=new a(),当我单击Button2时,我希望能够显示MessageBox.Show(a.name)。如果这很重要的话,可能会有多个Foo实例 以这种方式使用类实例的最佳选择是什么?可能您只需要一个静态类可能您只需要一个静态类Winforms只不过是一些由代码支持的图形元素。代码可以像普通的“非winform”代码一

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

例如,如果我创建了一个名为name的字符串属性的类Foo,我希望通过单击Button1来实例化Foo a=new a(),当我单击Button2时,我希望能够显示MessageBox.Show(a.name)。如果这很重要的话,可能会有多个Foo实例


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

可能您只需要一个静态类

可能您只需要一个静态类

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


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

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


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

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

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() { }
    }
}

如果希望此变量可供其他表单访问,则需要将其公开(最好作为属性)

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

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() { }
    }
}

如果希望其他表单可以访问此变量,则需要将其公开(最好是作为属性)

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


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

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

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

Jon Skeet[C#MVP] 来宾职位:不适用

2:2007年5月15日 回复:csharp中的应用程序变量


5月15日下午12:04,控制频率 写的: 引述: 对csharp来说还是新的。我来自C++背景。 > 在C++中,我会在应用程序中创建一些顶级变量 班级。这些是可以访问的有效全局变量 在整个应用程序中,因为应用程序对象是已知的。 > csharp与这种做法的等效性是什么? 我似乎无法将变量添加到“公共类程序”类和 从其他文件获取对它们的访问权限。 > 我可能遗漏了一些明显的东西。 基本上,您需要公共静态字段(或者最好是属性)

另一种选择是单件:

乔恩

当有疑问时,找到约翰·斯基特签名的东西。可在以下网址找到:Jon Skeet[C#MVP] 来宾职位:不适用

2:2007年5月15日 回复:csharp中的应用程序变量


5月15日下午12:04,控制频率 写的: 引述: 对csharp来说还是新的。我来自C++背景。 > 在C++中,我会在应用程序中创建一些顶级变量 班级。这些是可以访问的有效全局变量 在整个应用程序中,因为应用程序对象是已知的。 > csharp与这种做法的等效性是什么? 我似乎无法将变量添加到“公共类程序”类和 从其他文件获取对它们的访问权限。 > 我可能遗漏了一些明显的东西。 基本上,您需要公共静态字段(或者最好是属性)

另一种选择是单件:

乔恩


当有疑问时,找到约翰·斯基特签名的东西。找到:

谁负责FOO实例?它可以从多个表单中更改吗?我希望它可以通过多个表单访问/更改,当然。我不确定谁对FOO负责,因为这可能是我问题的答案。在使用winforms回答这个问题时,我对变量作用域不够熟悉。谁负责FOO实例?它可以从多个表单中更改吗?我希望它可以通过多个表单访问/更改,当然。我不确定谁对FOO负责,因为这可能是我问题的答案。在使用winforms回答这个问题时,我对变量作用域不够熟悉。静态类是否适合于需要多个类实例的情况?我将打开几个文件,并将相关信息解析为类的各种属性。我想只有在我没有处理多个实例的情况下,静态类才合适。在我需要多个实例的情况下,静态类合适吗?我将打开几个文件,并将相关信息解析为类的各种属性。我认为只有在我不使用多个实例的情况下,静态类才合适。他的第二个要求是
a
可以从不同的形式获得。编辑:还是不?这正是我想要的。我能够创建一个类,并在表单范围内实例化一个列表,所有表单对象都可以访问它。漂亮,谢谢!混乱,虽然我希望如此,但它不是必要的。任何可以通过多种形式访问的进一步信息都是非常好的。他的第二个要求是
a
可以从不同的形式获得。编辑:还是不?这正是我想要的。我是一个