国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

使用C# 2.0泛型實現單例模式重用

2024-07-21 02:29:08
字體:
來源:轉載
供稿:網友
  介紹

  很多有著不同開發背景得人都會比較熟悉單例模式。他們會發現每次他們要創建一個不同的單例類的時候,都不得不寫同樣得代碼。使用新的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個線程在單態模式下進行了測試。所有線程都返回相同的值,這說明這是一個線程安全的使用泛型來實現的單態模式。 我相信這已經充分說明了泛型怎么幫助你簡化代碼。

收集最實用的網頁特效代碼!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 静安区| 大渡口区| 土默特右旗| 启东市| 蓬莱市| 桐梓县| 林口县| 乡宁县| 龙泉市| 都兰县| 临西县| 井陉县| 延庆县| 梧州市| 南召县| 龙泉市| 伽师县| 富顺县| 沙洋县| 阜阳市| 巴南区| 吴江市| 梁平县| 南投市| 汤阴县| 特克斯县| 黄石市| 鸡西市| 新乡县| 桐柏县| 临沭县| 曲靖市| 中西区| 咸阳市| 商洛市| 谢通门县| 通城县| 北票市| 阿城市| 宁河县| 阳春市|