public struct information
{
public information(string name, int age)
{
this.name = name;
this.age = age;
}
public string name;
public int age;
}以上声明,只能在本窗口的程序调用,
如何声明全局的数据类型,可以让所有的子窗口程序共用
{
public information(string name, int age)
{
this.name = name;
this.age = age;
}
public string name;
public int age;
}以上声明,只能在本窗口的程序调用,
如何声明全局的数据类型,可以让所有的子窗口程序共用
解决方案 »
- C#关于串口发送数据listview控件接收
- 换了Win7后,sa用户出问题了
- 为什么新建的Access书库是打开状态的啊
- 未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序
- ObjectDataSource与gridview
- 附给datagrid数据源时,如何根据已知的字串值替换显示另一个字串值。不是bool型显示
- 求助!!
- 【急!!!!】怎样预设datagrid的不同列宽啊???
- 我定义了一个string的数组,怎么知道一个string值找到它在string数组里的位置?
- c#中小写转大写怎么写?
- 怎么用登录的用户名作为条件修改用户信息?
- 编程验证软件是否已安装!!
也可以把它定义成public 类型的
<<Visual c#.net入门与提高>>清华大学出版社 page46有这么一句话:在C#中不能声明全局变量或全局静态变量,声明语句所声明的变量都是局部变量或者类型的成员变量.
看来我理解错了?
你可以在项目上新建一个cs文件,然后写入类似如下的代码:public static class MyUtil
{
public static int MyValue;
}在调用的时候:MyUtil.MyValue = 100;当然,非常不推荐这样做!楼主的设计思想方面有点点误区,就是,C#不像c++,C#是一种完全面向对象的语言,因此一切都定义在类的层次,而不存在全局上的东西。如果你非要这样也可以,就按我上面讲的这样。当然,这种是非常不安全的(主要在多线程上)。
在一般情况下,我都不会这样做,除非使用到了Singleton,不得不在全局共享的单元。public class Information
{
private static volatile Information instance = null;
private static object sync = new object();
static Information () {}
private Information()
{
this.Name = string.Empty; this.Age = 0;
} public string Name
{ get;set; }
public int Age
{ get;set; } public static Information Instance
{
get
{
if (instance == null)
{
lock(sync)
{
if (instance == null)
instance = new Information();
}
}
return instance;
}
}
}那么你在调用的时候,就只需要:Information.Instance.Name = "xxx";
Information.Instance.Age = 23;这是C#实现singleton模式的一种形式,还有其他的形式,你可以参考MSDN。但是注意:千万别在JAVA的程序中使用这种形式,因为无论如何,JAVA都会对局部变量进行优化,而使得上面的第一个判断instance是否为空的语句失效。在你的情况,可能也不需要这样实现,在多个窗体都需要这个Information信息的时候,你可以在第二个窗体中暴露一个接口给主窗体,在主窗体调用第二个窗体的时候,把这个信息传过去就可以了:// 第二个窗体
private Information information;
public void SetInformation(Information information)
{
this.information = information;
}// 第一个窗体
Form2 frm2 = new Form2();
frm2.SetInformation(new Information(xxx, xxx));
frm2.Show();
在一般情况下,我都不会这样做,除非使用到了Singleton,不得不在全局共享的单元。public class Information
{
private static volatile Information instance = null;
private static object sync = new object();
static Information () {}
private Information()
{
this.Name = string.Empty; this.Age = 0;
} public string Name
{ get;set; }
public int Age
{ get;set; } public static Information Instance
{
get
{
if (instance == null)
{
lock(sync)
{
if (instance == null)
instance = new Information();
}
}
return instance;
}
}
}那么你在调用的时候,就只需要:Information.Instance.Name = "xxx";
Information.Instance.Age = 23;这是C#实现singleton模式的一种形式,还有其他的形式,你可以参考MSDN。但是注意:千万别在JAVA的程序中使用这种形式,因为无论如何,JAVA都会对局部变量进行优化,而使得上面的第一个判断instance是否为空的语句失效。在你的情况,可能也不需要这样实现,在多个窗体都需要这个Information信息的时候,你可以在第二个窗体中暴露一个接口给主窗体,在主窗体调用第二个窗体的时候,把这个信息传过去就可以了:// 第二个窗体
private Information information;
public void SetInformation(Information information)
{
this.information = information;
}// 第一个窗体
Form2 frm2 = new Form2();
frm2.SetInformation(new Information(xxx, xxx));
frm2.Show();
information[] aaa = new information[2] { //加入 张三,20;李四,22
new information("张三", 20),
new information("李四", 22)
不过我比较喜欢用IList。
private Information[] information;
public void SetInformation(Information[] information)
{
this.information = information;
}// 第一个窗体
Form2 frm2 = new Form2();
frm2.SetInformation(new Information[] { new Information("xxx1", xxx1), new Information("xxx2", xxx2) } );
frm2.Show();
用上面的代码试试看。