本文共 2774 字,大约阅读时间需要 9 分钟。
一.Singleton 模式.
静态构造函数不能接受参数,而且只能有一个,他实际是私有的,由编绎器调用的.
可以用属性的方法,让他做到"接受参数"的效果.也可以建一个公有的方法,接受参数.1,单线程Singleton模式.
/// <summary> /// 单线程Singleton模式 /// </summary> public class Class1 { private static Class1 c1;private Class1()
{}public static Class1 C1
{ get { if (c1 == null) { c1 = new Class1(); } return c1; } } }2,多线程Singleton模式.
/// <summary>
/// 多线程Singleton模式,方法1 /// </summary> public class Class2 { public static readonly Class2 C2 = new Class2();private Class2()
{ } }/// <summary>
//多线程Singleton模式,方法1,相当于这样 /// </summary> public class Class3 { public static Class3 c3; static Class3() { c3 = new Class3(); }private Class3()
{} }/// <summary>
/// 多线程Singleton模式,方法2 /// </summary> public class Class4 { private static volatile Class4 c4 = null;private static object lockHelper = new object();
private Class4(){}
public static Class4 C4()
{ if (c4 == null) { lock(lockHelper) { if (c4==null) { c4 = new Class4(); } } } return c4; }}
3,单,多线程Singleton模式.构造函数带参数. /// <summary> /// 单线程Singleton模式,构造函数带参数 /// </summary> public class Class5 { int _x,_y; private static Class5 c5; private Class5(int x,int y) { this._x = x; this._y = y; }public static Class5 getClass5(int x,int y)
{ if(c5==null) { c5 = new Class5(x,y); } else { c5._x = x; c5._y = y; } return c5; } }/// <summary>
/// 多线程Singleton模式,方法2,构造函数带参数 /// </summary> public class Class6 { private static volatile Class6 c6 = null;private static object lockHelper = new object();
int _x,_y;
private Class6(int x,int y)
{ this._x = x; this._y = y; }public static Class6 C6(int x,int y)
{ if (c6 == null) { lock(lockHelper) { if (c6==null) { c6 = new Class6(x,y); } } } else { c6._x = x; c6._y = y; } return c6; } }/// <summary>
/// 多线程Singleton模式,方法1,构造函数带参数. /// </summary> public class Class7 { public static readonly Class7 c7 = new Class7(); int _x,_y;private Class7()
{ }public void Init(int x,int y)
{ this._x = x; this._y = y; }//或者
public int x { get { return this._x; } set { this._x = value; } }public int y
{ get { return this._y; } set { this._y = value; } }}
测试代码:private void button1_Click(object sender, System.EventArgs e)
{ Class1 c1 = Class1.C1; Class2 c2 = Class2.C2; Class3 c3 = Class3.c3; Class4 c4 = Class4.C4(); Class5 c5 = Class5.getClass5(3,4); Class6 c6 = Class6.C6(3,4);Class7 c7 = Class7.c7;
c7.Init(3,4); c7.x = 3; c7.y = 4;Class1 cc1 = Class1.C1;
Class2 cc2 = Class2.C2; Class3 cc3 = Class3.c3; Class4 cc4 = Class4.C4(); Class5 cc5 = Class5.getClass5(3,4); Class6 cc6 = Class6.C6(3,4);Class7 cc7 = Class7.c7;
cc7.Init(3,4); cc7.x = 9; cc7.y = 10;if(c1==cc1 && c2==cc2 && c3==cc3 && c4==cc4
&& c5 == cc5 && c6==cc6 && c7 == cc7) { MessageBox.Show("Yes"); } else { MessageBox.Show("No"); }MessageBox.Show(c7.x.ToString());
MessageBox.Show(cc7.x.ToString());}
转载地址:http://iuobi.baihongyu.com/