namespace DesignPatterns.Singleton
{    /// <summary>
    ///Single 的摘要说明
    /// </summary>
    public class Single
    {
        private static Single single = null;
        private static string str;        private Single()
        {
            //
            //TODO: 在此处添加构造函数逻辑
            //
        }
        
        public static Single GetInstance()
        {
            if (single == null)
            {
                single = new Single();
                str = "单例模式测试";
            }
            else
            {
                str = "我已经存在了";
            }
            return single;
        }        public string Show()
        {
            return str;
        }
    }
}
public partial class DesignPatterns_SingletonTest : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        Response.Write(DesignPatterns.Singleton.Single.GetInstance().Show());
        Response.Write(DesignPatterns.Singleton.Single.GetInstance().Show());
    }
}各位帮忙分析下,我运行显示 单例模式测试我已经存在了 但是为什么关闭后重新运行显示 我已经存在了我已经存在了???除了给null大家有没有其他办法呀。

解决方案 »

  1.   

    你所谓的关闭是指关闭网页么?因为你关闭网页时,其实这个地址还存在的,你可以通过右下角看到一个ASP.NET DEV SERVER的icon,那个东西关闭才是真正的关闭。
      

  2.   


    多谢这位兄弟啦,我关闭的是浏览器,然后重新开的个浏览器。
    我按照你的方法,把ASP.NET那个关了,重新运行就显示正常了。但是我想继续问下,如果这样子加入发布了网站,会是正常的吗?
    C# 的对象是自动回收的,我就感觉这个单例没那么快被回收。
      

  3.   

    因为你给对象赋了值,并且该对象在被使用,自动回收的前提是对象是空引用时才会被回收。单例就是为了不重复创建实例呀,并且你写的这个不是线程安全的.看看clr via c#吧,把基础加深些
      

  4.   


    这个就只有个单线程吧,要安全加个LOCK该可以吧,
    现在是我不管这个是不是单例模式,我的意思是想说明这种情况,
    如果我现在发布了这个页面,这个页面single对象只允许一个实例存在,
    在用户浏览这个页面时会是怎样一个情况呀