【发布时间】:2013-06-19 22:42:18
【问题描述】:
我创建了一个单例类,当我在启动 Visual Studio 后第一次执行它时,它会打印预期的结果,因为 count 的值最初为零,当它达到一个时它会退出循环但是,当我第二次执行它时,计数器值仍然保持为 1,即使在我停止调试后它也不会归零。请帮助我找到问题的解决方案。谢谢。 我的班级代码如下:
public partial class Singleton_class : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
CEO c1 = CEO.GetCeoObject("Rahul", "MS", 28);
CEO c2 = CEO.GetCeoObject("Ram", "MS", 26);
Response.Write(c1.name + " " + c1.qualifiaction + " " + c1.age + "<br/>");
Response.Write(c2.name + " " + c2.qualifiaction + " " + c2.age + "<br/>");
}
}
namespace Singleton
{
public class CEO
{
public static CEO c1;
public static int count;
public string name;
public string qualifiaction;
public int age;
private CEO(string n, string q, int a)
{
this.name = n;
this.qualifiaction = q;
this.age = a;
}
public static CEO GetCeoObject(string name, string quali, int age)
{
if (count == 0) //this remains at one
{
c1 = new CEO(name, quali, age);
count++;
}
return c1;
}
}
}
【问题讨论】:
-
静态变量在所有请求之间共享,并在应用程序域中发挥作用。如果系统重新启动您的 asp.net 应用程序,静态变量将丢失。
-
不是线程安全的,不是单例的方式。 csharpindepth.com/articles/general/singleton.aspx
-
如果你增加
count++,你的代码看起来真的很奇怪,那么你为什么要检查它是否==0,快速浏览一下它可能只会工作一次 -
@DJKRAZE 感谢您的回复。我这样做是因为我只想打印第一个对象的值,无论用户创建了多少对象。
-
您已经创建了一个类,该类在每次调用 GetCeoObject 方法时都静态返回相同的对象。除了实现上的弱点之外,这是一个 Singleton 类。现在,如果您想在每次调用该方法时获取不同的对象,则返回一个新对象并删除计数逻辑+