【发布时间】:2020-12-13 01:52:51
【问题描述】:
我需要确认单例模式。
我有一个单例类,我将它用作 dll。我编写了一个引用这个 dll 的程序,并调用了我的单例类。 我写了第二个程序,我也这样做。
如果我告诉你即使我有两个程序它们都调用我的单例类的单个实例,我说得对吗?
我试图增加一个静态变量instancenumber,每次我通过构造函数时都会增加,两个程序都告诉我instancenumber是1。所以应该没问题,但我需要你的建议来确定。
谢谢。最好的问候
类单例:
namespace SingletonClassLib
{
public class SingletonClass
{
public static int InstanceNumber = 0;
private static string myName;
#region //Singleton initialisation
private SingletonClass() { createInstance(); }
private void createInstance()
{
InstanceNumber++;
myName = myName + InstanceNumber.ToString();
}
public static SingletonClass _I { get { return NTCSession._i; } }
private class NTCSession
{
static NTCSession() { }
internal static readonly SingletonClass _i = new SingletonClass();
}
private static List<WeakReference> instances = new List<WeakReference>();
#endregion //Singleton initialisation
public static string askname { get { return myName; } }
}
}
方案一:
using System.Windows.Forms;
using SingletonClassLib;
namespace Singletontest
{
public partial class Form1 : Form
{
SingletonClass myclass = SingletonClass._I;
public Form1()
{
InitializeComponent();
string Name = SingletonClass.askname;
MessageBox.Show("Program first: "+Name);
}
}
}
方案二:
using System.Windows.Forms;
using SingletonClassLib;
namespace Singletontest
{
public partial class Form1 : Form
{
SingletonClass myclass = SingletonClass._I;
public Form1()
{
InitializeComponent();
string Name = SingletonClass.askname;
MessageBox.Show("Program second: "+Name);
}
}
}
【问题讨论】:
-
InstanceNumber 存储在内存中。 ““简单”内存(例如在您的示例中)是每个进程。两个进程 => 此数据的两个副本。单例类在这里无关紧要。如果您想要一个真正的跨进程单例,那么您必须使用共享的内存跨进程,例如:stackoverflow.com/questions/7894224/…
标签: c# singleton call singleton-type