使用此代码:
public class MyClass
{
public int Number;
private static MyClass myClass;
...
public MyClass GetInstance()
{
...
return myClass;
}
}
有没有办法可以支持以下两种陈述?
MyClass.Number = 5;
其中MyClass检索用于存储Number
值的静态类和
MyClass myLocalClass = new MyClass();
或远离Singleton设计模式的替代方案,因为我希望能够创建一个实例。
感谢您的期待!
答案 0 :(得分:1)
你想要的只是一个静态成员。根据定义,Singleton只有一个实例,这意味着你无法显式实例化它。
你的课应该只是。
public class MyClass
{
public static int Number;
}
但是,除非你还有一些非静态成员,否则创建该类的多个实例是毫无意义的。
答案 1 :(得分:1)
您正在寻找的是MonoState模式。我引用Robert C. Martin的Agile Principles, Patterns, and Practices in C#
MONOSTATE模式是实现奇点的另一种方式。有用 通过完全不同的机制。
第一个测试函数简单地描述了一个x变量的对象 可以设置和检索。但第二个测试案例显示了两个 同一个类的实例表现得好像它们是一个。如果你设置 一个实例上的x变量为特定值,您可以检索 通过获取不同实例的x变量来获取该值。它是 虽然这两个实例只是同一个不同的名称 对象
因此,您可以实例化2个或更多个类,但它们都会共享相同的值。
以下是实施的一个例子:
public class Monostate
{
private static int itsX;
public int X
{
get { return itsX; }
set { itsX = value; }
}
}
测试,所以你可以看到它是如何使用的:
using NUnit.Framework;
[TestFixture]
public class TestMonostate
{
[Test]
public void TestInstance()
{
Monostate m = new Monostate();
for (int x = 0; x < 10; x++)
{
m.X = x;
Assert.AreEqual(x, m.X);
}
}
[Test]
public void TestInstancesBehaveAsOne()
{
Monostate m1 = new Monostate();
Monostate m2 = new Monostate();
for (int x = 0; x < 10; x++)
{
m1.X = x;
Assert.AreEqual(x, m2.X);
}
}
}