日期:2014-05-20  浏览次数:21473 次

如何定义一个全局的结构体
如何定义一个全局的结构体,例如
public   struct   aaa
{
        public   string   cn;
        public   string   rs;
}

public   aaa   g;

然后我想让这个g   在任何窗体或类中都可以直接输入g.   就可以将   cn   或   rs   找出.

或者定义一个函数,就可以在任何窗体或类中直接使用.

在Vb中可以添加一个模块,将上面的代码写在模块中就可以了,但在c#中如何来作呢.



------解决方案--------------------
用Static声明:
public struct aaa
{
public string cn;
public string rs;
}

public static aaa g;
------解决方案--------------------
如果你是做WinForm程序,在解决方案浏览器中打开Program.cs

static class Program
{
public aaa g;////////看到了么???

/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
------解决方案--------------------
可以如下定义:

namespace BizService
{
public class Class1
{
public struct aaa
{
public string cn;
public string rs;
}

}

public class temp
{
public static Class1.aaa tmp;
}
}

然后在page页中调用:
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//方式一:
BizService.Class1.aaa a;
a.cn;
//方式二:
BizService.temp.tmp.cn;
}
}
------解决方案--------------------
你这个全局的结构体是干吗用的,一个常量么?????

如果你要写g.cm(真不知道你为什么一定要前面不带东西.....) ,那么就不要用你上面的定义,建个静态类得了.
public static class g
{
public static string cn;
public static string rs;
}

这是惟一让你可以写 g.cn,g.rs 来访问的了.

问题是你已经在错误的路子上了,应该及早走回来. 定义静态或非静态, 结构体或类,关键在于模型和逻辑,而不是根据你对语法写法的喜好来决定.

如果你希望这是个一个全局的结构体,你可以用一个Singleton来实现,也可以简单的在某个类内定义一个静态属性指向该 结构体 , 但是,访问的方式必须是按照语法的规定来访问,而不是 "我喜好##### ".


如果你这个结构体不是只读的,或者它本身含有修改自己内部字段的方法,那最好现在就把一切思路收回去,重新设计你的方案.

一个全局的,非只读的,结构体,在一个程序中出现,是一种深深的不幸!!!!
------解决方案--------------------
不要说VB中可以...JS中可以....D++或者E#中可以.....

老语言中可以而新语言不可以或不推荐的做法你觉得是历史的倒退还是进步更合逻辑???


不要把VB和ASP的坏习惯带到面向对象的C#里来.