读书人

请教这种现象如何解释很不理解,有关

发布时间: 2012-05-22 18:18:54 作者: rapoo

请问这种现象怎么解释,很不理解,有关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互相独立

读书人网 >C#

热点推荐