日期:2014-05-18  浏览次数:20782 次

请问这种现象怎么解释,很不理解,有关static
在Asp.net中,如果在某个类(aspx.cs)中声明一个static string字段common,
A用户打开浏览器,将common设置为字符串a,
B用户打开浏览器,将common设置为字符串b,
此时,如果A页面不停的刷新,一会儿就可以看到common的值变为b
这里可以看出静态成员与实例成员的区别。


但是请看以下控制台的示例

C# code

class Program
    {
        static string msg = string.Empty;
        static void Main(string[] args)
        {
            if (args.Length > 0)
            {
                while (true)
                {
                    Console.WriteLine(msg);
                    Thread.Sleep(2000);
                }
            }
            msg = Console.ReadLine();
            Console.ReadLine();
        }
    }




如果编译后好,文件名叫console1.exe.
我现在运行该应用程序的两个实例。
第一次我直接双击console1.exe,在等待输入的地方输入a字符。然后msg=a
紧接着第二次(上个应用没有关闭),我复制console1.exe在硬盘上的完整路径。然后启动cmd命令,在编辑菜单中点粘贴,
即将完整的console1.exe的路径粘贴上来,后面加一个参数 -b,此时应该每隔二秒钟在控制台中显示a
但实际运行结果却依然显示是string.empty.
请问怎么解释这种实现。难道我对static的理解有错误?

------解决方案--------------------
static的有效区域在一个进程(Process)内。
------解决方案--------------------
探讨

我原来的也是猜,运行两个应用程序实例,这两个 实例运行在不同的进程中,而因为windows的进程是内存和资源与其它进程物理隔离。。。

看来猜测得到部分验证,不知道有没有其它意见的朋友。

------解决方案--------------------
确切说是AppDomain的隔离性
------解决方案--------------------
探讨
确切说是AppDomain的隔离性

------解决方案--------------------
探讨

A用户打开浏览器,将common设置为字符串a,
B用户打开浏览器,将common设置为字符串b,
但你后台的网站是在一个Process上,所以static有效
而打开2个exe是两个Process,static互相独立