介紹
很多有著不同開發背景得人都會比較熟悉單例模式。他們會發現每次他們要創 建一個不同的單例類的時候,都不得不寫同樣得代碼。使用新的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();
}
}