c# 怎样定义整个程序每个窗口都可以访问的变量?

2024-12-26 07:01:11
推荐回答(5个)
回答1:

1. 你说的“每个窗口都可以访问的变量”是指全局变量,在C#中是靠静态类的静态域来实现的,比如定义以下的类:
public class MyContext
{
public static string MyContextVar="HELLO";
}
在任何一个窗体中只需要MyContext.MyContextVar就可以获得这个“HELLO”。不过这只是一个简单的例子,这样不是线程安全的,如果做线程安全的上下文还是比这个复杂的:)
2. 两个窗体之间传值一般有两种思路,利用上面提到的上下文是一种办法,另一种办法是互相之间通过delagate来进行值传递,相比于常见的入门级玩家使用的直接爆露public属性的方法,delegate是一个比较完善的解决方案,可以应用在商业开发中。
比如B在关闭时将B中的某个属性BStatus传回A并且显示在A的txtFromB上。
A类和B类以外,命名空间内的代码,定义了传递数据的事件:
public delegate void PassB2A(string status);
A的代码
以下为挂载委托处理器并弹出B窗体
private void RiseB()
{
ClassB cls = new ClassB();
cls.passSta += new PassB2A(this.Render2A);
cls.Show();

}

以下为委托的处理器
private void Render2A(string status)
{
txtFromB.Text=status;
}

以下为B的代码
定义爆露的委托,用来传递数据
public PassB2A passSta;

以下为FormB关闭事件的代码,调用委托来传递数据
private void FormB_Closed(object sender, FormClosedEventArgs e)
{
passSta("Hello");
}

}

回答2:

C#中引入了属性
private static 类型 变量名;
public (类型) 属性名
{
get{ return 变量;}
set{ 变量=value;}
}

赋值的话:窗体.属性名=value(所赋予的值);
返回值:窗体.属性名;

你可以到网上去搜索下,属性代替了全局变量,很好用的

如果是定义静态变量的话是不是意味着程序运行中就不能修改了?
静态变量是可以更改的,他保存的是最近操作的数值,就是你开辟了一个固定的内存空间,用于存放这些static类型的变量

回答3:

最简单的方法。新建一个类。静态定义这些信息数据。呵呵。这个类放到APP下(默认的)。这样这个类的属性在任何地方任何窗口都可以使用。
当然不是很安全,但是很符合你的需要。

回答4:

静态变量是不会被回收,不是不能修改!!!
在B中想要把信息传给A的方法太多了,为啥非要全局变量:
可以在b中添加一个属性 将值赋值给该属性,然后在A中获取;
可以在通过方法引用类型参数(或者ref/out)在B中赋值,在A中获取;
可以通过在B中添加委托或事件,在A中订阅该委托获取;
。。。

回答5:

session cookie 也可以用类 或者少的话 直接写在webconfig里