首 页  资讯中心 下载中心 资讯教程 最新下载 发布软件 发布文章 网通站 电信站繁體中文
设为首页
加入收藏
联系我们
 
您当前的位置:曾子源码软件下载站 -> 网络编程 -> asp.net -> 文章内容 退出登录 用户管理
热门文章
· 常用C,VC,C++书籍下..
· 新概念英语视频教程..
· 常用 JAVA JAVA2 J..
· 《梦幻麻将馆9雀圣争..
· 新东方英语视频教程..
· 常用VB,Visual Basi..
· [组图] After Effect..
· WINDOWS 所有系统文..
· [组图] 让机器运行多..
· 全美经典学习指导系..
相关文章
· [组图] 更多欣喜 Win..
· 如何最安全使用网上..
· [图文] 只需要两招瞬..
· [图文] 微软披露使用..
· 使用防火墙封阻应用..
· 促使用户升级Vista,..
· 新手上路必看 腾讯Q..
· [图文] PPStream日常..
· [图文] 网络不好 教你..
· 提升网络效率 宽带路..
使用C# 2.0泛型实现单例模式重用
作者: 博客园 justinw     来源:不详  发布时间:2006-5-16 19:38:36  发布人:admin

减小字体 增大字体

     介绍
  
    很多有着不同开发背景得人都会比较熟悉单例模式。他们会发现每次他们要创建一个不同的单例类的时候,都不得不写同样得代码。使用新的C# 2.0的泛型,可以实现只写一次同样得代码。
  
    使用 C# 2.0 泛型来完成单例模式的重用
  
    使用 C# 2.0 的泛型,使得实现我所说的"单例提供者"成为可能。这是一个可用来创建单例类实例确不需要为每个特定的类重写单例模式代码的可重用的类。这样分离出单例结构的代码,将有利于保持按单例模式使用类或不按单例模式使用类的灵活性。
  
  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 SingletonProvider<T> where 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<TestClass>.Instance.Write();
  
    关注点
  
    我已经在一个超线程的双处理器上使用100个线程在单态模式下进行了测试。所有线程都返回相同的值,这说明这是一个线程安全的使用泛型来实现的单态模式。 我相信这已经充分说明了泛型怎么帮助你简化代码。
  
    做人要厚道,请注明转自酷网动力(www.ASPCOOL.COM)。
[] [返回上一页] [打 印] [收 藏]
∷相关文章评论∷    (评论内容只代表网友观点,与本站立场无关!) [发表评论...]
关于本站 - 网站帮助 - 广告合作 - 下载声明 - 友情连接 - 网站地图 - 网站信息排名查询
Copyright © 2004-2006 Zasp.Net. All Rights Reserved .