情况是这样的,就是我按Ctrl+F5把网站编译了,然后点击下btnVisite控件,会记录我访问公司的次数,可为什么我在关闭网站后再次按Ctrl+F5后,记录的还是我最后一次访问网站的次数在加1呢??假如我上次关闭网站访问的值为29,那么我再次访问的值就会29++=30 .
只有把VS编译器关闭掉才会清零。难道只有在关闭编译器的时候内存才会清零吗,可我用控制台实验了下,为什么控制台每次关闭都再次编译的值就是初始值呢???
最有可能的原因是 readonly 这个关键字,但是也不应该出现上面的情况啊。using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace Pattern.Singleton
{
/// <summary>
/// 防止公司被派生。
/// 因为派生有可能生成多个公司实例
/// </summary>
public sealed class Company
{
private static readonly Company instance = new Company(); private Company() { } static Company() { } public static Company Instance()
{
return instance;
} private int visitedNum = 0; /// <summary>
/// 访问开发部
/// </summary>
/// <returns></returns>
public string DevelopDept()
{
visitedNum++;
return "访问了开发部";
} /// <summary>
/// 访问行政部
/// </summary>
/// <returns></returns>
public string AdminDept()
{
visitedNum++;
return "访问了行政部";
} /// <summary>
/// 总访问次数
/// </summary>
/// <returns></returns>
public int VisitedNum()
{
return this.visitedNum;
}
}
}
protected void btnVisite_Click(object sender, EventArgs e)
{
string deptType = "DevelopDept"; string dept = null; Company company = Company.Instance();
if (deptType == "DevelopDept")
{
dept = company.DevelopDept();
}
else if (deptType == "AdminDept")
{
dept = company.AdminDept();
} int visitedNum = company.VisitedNum(); this.lblResult.Text = dept + " 总共访问次数:" + visitedNum.ToString();
}
只有把VS编译器关闭掉才会清零。难道只有在关闭编译器的时候内存才会清零吗,可我用控制台实验了下,为什么控制台每次关闭都再次编译的值就是初始值呢???
最有可能的原因是 readonly 这个关键字,但是也不应该出现上面的情况啊。using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace Pattern.Singleton
{
/// <summary>
/// 防止公司被派生。
/// 因为派生有可能生成多个公司实例
/// </summary>
public sealed class Company
{
private static readonly Company instance = new Company(); private Company() { } static Company() { } public static Company Instance()
{
return instance;
} private int visitedNum = 0; /// <summary>
/// 访问开发部
/// </summary>
/// <returns></returns>
public string DevelopDept()
{
visitedNum++;
return "访问了开发部";
} /// <summary>
/// 访问行政部
/// </summary>
/// <returns></returns>
public string AdminDept()
{
visitedNum++;
return "访问了行政部";
} /// <summary>
/// 总访问次数
/// </summary>
/// <returns></returns>
public int VisitedNum()
{
return this.visitedNum;
}
}
}
protected void btnVisite_Click(object sender, EventArgs e)
{
string deptType = "DevelopDept"; string dept = null; Company company = Company.Instance();
if (deptType == "DevelopDept")
{
dept = company.DevelopDept();
}
else if (deptType == "AdminDept")
{
dept = company.AdminDept();
} int visitedNum = company.VisitedNum(); this.lblResult.Text = dept + " 总共访问次数:" + visitedNum.ToString();
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货