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

使用C#2.0泛型实现单例模式重用,第1张

使用C#2.0泛型实现单例模式重用,第2张

介绍

许多具有不同开发背景的人都会熟悉singleton模式。他们会发现,每当他们想要创建不同的单例类时,他们都必须编写相同的代码。使用C# 2.0的新泛型,您可以只编写一次相同的代码。

使用C# 2.0泛型来重用单例模式。

使用C# 2.0的泛型可以实现我所说的“单体提供者”。这是一个可重用的类,可用于创建单例类实例,而无需为每个特定的类重写单例模式代码。这样,具有singleton结构的代码将被分离,这将有助于保持按照singleton模式或不按照singleton模式使用类的灵活性。

公共密封类Singleton
{
Singleton()
{ }

public static Singleton Instance
{
get
{
return Singleton creator . Instance;
}
}

class singleton creator
{
//显式静态构造函数告诉C#编译器
//不要将类型标记为beforefieldinit
static Nested()
{ }

内部静态只读Singleton实例= new Singleton();
}
}

基于对泛型的理解,你找不到任何理由不在这段代码中将泛型中的类型参数替换为典型的' t '。如果这样做,代码将如下所示。

公共类SingletonProvider,其中T:new()
{
singleton provider(){ }

公共静态T实例
{
get { return singleton creator . Instance;}
}

class singleton creator
{
static singleton creator(){ }
internal static readonly T instance = new T();
}
}

请注意,这里使用了通用约束。此约束强制任何类型“t”具有不带参数的公共构造函数。这里,singletonCreator类被允许实例化类型“t”。

那么,如何使用单体提供者呢?为了弄清楚如何使用它,我们需要编写一个测试类。这个测试类有两个部分。第一部分是设置时间戳变量的值的默认构造函数。第二部分是一个公共函数,用于输出带有“Debug”的时间戳的值。WriteLine”。这个测试类意味着无论哪个线程在任何时候调用单个实例中这个类的公共方法,都将返回相同的值。

public class test class
{
private string _ createdTimestamp;

public test class()
{
_ createdTimestamp = DateTime。now . ToString();
}

public void Write()
{
Debug。WriteLine(_ createdTimestamp);
}
}

这个类使用一个单独的提供者,如下所示:

SingletonProvider。instance . Write();

焦点

我在一个超线程双处理器上测试过,在单一模式下有100个线程。所有线程返回相同的值,这表明这是使用泛型实现的线程安全的单例模式。我相信这已经充分展示了泛型是如何帮助您简化代码的。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 使用C#2.0泛型实现单例模式重用

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情