使用C# 2.0泛型实现单例模式重用

yuerhlf

yuerhlf

2016-02-19 15:23

今天给大家分享的是由图老师小编精心为您推荐的使用C# 2.0泛型实现单例模式重用,喜欢的朋友可以分享一下,也算是给小编一份支持,大家都不容易啊!

  介绍

  很多有着不同开发背景得人都会比较熟悉单例模式。他们会发现每次他们要创建一个不同的单例类的时候,都不得不写同样得代码。使用新的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 SingletonProviderT where T : new(){ SingletonProvider() { } public static T Instance {  get { return SingletonCreator.instance; } } class SingletonCreator {  static SingletonCreator() { }  internal static readonly T instance = new T(); }}

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

  注意在这里使用了泛型的约束。这个约束强制任何类型'T'都必须具有无参数的公共构造函数。这里允许singletonCreator类来实例化类型'T'。

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

  那么,要怎么样来使用单例提供者呢?为了弄清除如何使用它,我们需要写一个测试类。这个测试类有两个部分。第一部分是一个默认的构造函数,用来设置timestamp变量的值。第二部分是一个公共函数,用来实现用"Debug.WriteLine"来输出timestamp的值。这个测试类的意思就是不论那个线程在任何时候,在单例下调用这个类公共方法,都将返回相同的值。

  

public class TestClass{ private string _createdTimestamp; public TestClass () {  _createdTimestamp = DateTime.Now.ToString(); } public void Write() {  Debug.WriteLine(_createdTimestamp); }}

  这个类就像下面这样使用单例提供者:

  

SingletonProviderTestClass.Instance.Write();

  关注点

  我已经在一个超线程的双处理器上使用100个线程在单态模式下进行了测试。所有线程都返回相同的值,这说明这是一个线程安全的使用泛型来实现的单态模式。 我相信这已经充分说明了泛型怎么帮助你简化代码。

展开更多 50%)
分享

猜你喜欢

使用C# 2.0泛型实现单例模式重用

编程语言 网络编程
使用C# 2.0泛型实现单例模式重用

Visual C# 2.0泛型编程基础

编程语言 网络编程
Visual C# 2.0泛型编程基础

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

C#下的单例实现

编程语言 网络编程
C#下的单例实现

彻底剖析C# 2.0泛型类的创建和使用

编程语言 网络编程
彻底剖析C# 2.0泛型类的创建和使用

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

C# 2.0中泛型编程初级入门教程

编程语言 网络编程
C# 2.0中泛型编程初级入门教程

Visual C#泛型学习之泛型介绍

编程语言 网络编程
Visual C#泛型学习之泛型介绍

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

生活=持续经营 - QQ搞笑分组

生活=持续经营 - QQ搞笑分组

够萌够可爱:看什么看 没见过帅哥啊 - QQ搞笑分组

够萌够可爱:看什么看 没见过帅哥啊 - QQ搞笑分组
下拉加载更多内容 ↓