public struct information
        {
            public information(string name, int age)
            {
                this.name = name;
                this.age = age;
            }
            public string name;
            public int age;
        }以上声明,只能在本窗口的程序调用,
如何声明全局的数据类型,可以让所有的子窗口程序共用

解决方案 »

  1.   

    现在要使用全局的是 information ,这个是数据类型,而不是数据变量。想让全局的程序都能能随时采用此数据类型。
      

  2.   

    定一个类 把以上代码写在这个类里面就可以咯  
    也可以把它定义成public  类型的 
      

  3.   

    你不要误导人家啊老大,什么只在同一源文件里有效。你从哪里学的啊,一个运行的程序跟源文件有什么关系?都已经编译成二进制的dll或者exe了,静态变量,只要它是public的,并且定义它的类也是public的,就可以在整个程序域,也就是整个程序都是共享的。
      

  4.   

    那我也不知道了    
    <<Visual c#.net入门与提高>>清华大学出版社  page46有这么一句话:在C#中不能声明全局变量或全局静态变量,声明语句所声明的变量都是局部变量或者类型的成员变量.
     看来我理解错了?
      

  5.   

    我都很菜了,看来还有人对 struct 不理解,crazying……
      

  6.   


    你可以在项目上新建一个cs文件,然后写入类似如下的代码:public static class MyUtil
    {
        public static int MyValue;
    }在调用的时候:MyUtil.MyValue = 100;当然,非常不推荐这样做!楼主的设计思想方面有点点误区,就是,C#不像c++,C#是一种完全面向对象的语言,因此一切都定义在类的层次,而不存在全局上的东西。如果你非要这样也可以,就按我上面讲的这样。当然,这种是非常不安全的(主要在多线程上)。
      

  7.   


    在一般情况下,我都不会这样做,除非使用到了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();
      

  8.   


    在一般情况下,我都不会这样做,除非使用到了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();
      

  9.   

    非常的感谢您这么细心的指导,但如果我要采用数组的方式赋值,好象不行,比如:
            information[] aaa = new information[2] {    //加入 张三,20;李四,22 
                new information("张三", 20),
                new information("李四", 22)
      

  10.   

    数组应该是可以的啊。在Form2中的定义上稍做改动就是了。
    不过我比较喜欢用IList。
      

  11.   

     static
      

  12.   

    // 第二个窗体
    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();
    用上面的代码试试看。