扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:中国IT实验室 来源:中国IT实验室 2007年9月12日
关键字: 编程
public sealed class Singleton { Singleton() { } public static Singleton Instance { get { return SingletonCreator.instance; } } class SingletonCreator { // Explicit static constructor to tell C# compiler // not to mark type as beforefieldinit static Nested() { } internal static readonly Singleton instance = new Singleton(); } }基于对泛型的了解,你可以发现没有理由不在这段代码里替换类型参数为泛型里典型的'T'。如果这样做,这段代码就变成下面这样
public class SingletonProviderwhere T : new() { SingletonProvider() { } public static T Instance { get { return SingletonCreator.instance; } } class SingletonCreator { static SingletonCreator() { } internal static readonly T instance = new T(); } }
注意在这里使用了泛型的约束。这个约束强制任何类型't'都必须具有无参数的公共构造函数。这里允许singletoncreator类来实例化类型't'。
那么,要怎么样来使用单例提供者呢?为了弄清除如何使用它,我们需要写一个测试类。这个测试类有两个部分。第一部分是一个默认的构造函数,用来设置timestamp变量的值。第二部分是一个公共函数,用来实现用"debug.writeline"来输出timestamp的值。这个测试类的意思就是不论那个线程在任何时候,在单例下调用这个类公共方法,都将返回相同的值。
public class TestClass { private string _createdTimestamp; public TestClass () { _createdTimestamp = DateTime.Now.ToString(); } public void Write() { Debug.WriteLine(_createdTimestamp); } } 这个类就像下面这样使用单例提供者: SingletonProvider.Instance.Write();
关注点
我已经在一个超线程的双处理器上使用100个线程在单态模式下进行了测试。所有线程都返回相同的值,这说明这是一个线程安全的使用泛型来实现的单态模式。
我相信这已经充分说明了泛型怎么帮助你简化代码。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者