介绍
很多有着不同开发背景得人都会比较熟悉单例模式。他们会发现每次他们要创建一个不同的单例类的时候,都不得不写同样得代码。使用新的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个线程在单态模式下进行了测试。所有线程都返回相同的值,这说明这是一个线程安全的使用泛型来实现的单态模式。 我相信这已经充分说明了泛型怎么帮助你简化代码。
From:
http://www.ninedns.com/asp.net/2007102520336.html
分享到:
相关推荐
3. 集合与泛型:.NET 2.0引入了泛型,源码将展示如何创建和使用泛型集合,以提高代码的效率和可重用性。 4. ADO.NET:学习如何利用ADO.NET 2.0进行数据库操作,包括连接数据库、执行SQL语句、数据读取和数据绑定等...
13. **泛型与设计模式**:泛型为实现如工厂模式、单例模式等设计模式提供了更简洁、更灵活的方式,使代码更易于维护和扩展。 通过深入学习和实践这些泛型概念,开发者可以编写出更具灵活性、效率和复用性的C#代码。...
文件名称"Apress.Foundations.of.Object.Oriented.Programming.Using.dot.NET.2.0.Patterns.Oct.2005.pdf"很可能是一本详细讲解如何使用.NET 2.0框架进行面向对象编程的书籍,涵盖了各种设计模式和最佳实践。...
这些模式在.NET 2.0中都有相应的实现,通过源代码,开发者可以了解如何在C#或VB.NET中应用这些模式。 2. **ASP.NET 2.0**:这一版本的ASP.NET引入了母版页(Master Pages)、站点导航(Site Navigation)和主题...
泛型是C#的一个强大特性,允许创建可重用的类型,无需为每种数据类型都编写单独的实现。在这些案例中,你将看到如何定义和使用泛型类、泛型接口和泛型方法,理解其背后的类型擦除机制。 案例四:多线程编程。在"第4...
13. **设计模式**:讲解一些常见的设计模式,如工厂模式、单例模式、观察者模式等,以及如何在C#中实现它们。 14. **Windows Forms和WPF**:可能包括创建用户界面的基本知识,如控件、布局和事件处理,以及WPF的...
3. **泛型**:C# 2.0引入了泛型,允许创建可重用的数据结构和方法,不局限于特定的数据类型。泛型提高了代码的安全性和效率,是C#编程的重要组成部分。 4. **LINQ(Language Integrated Query)**:C# 3.0引入的...
1. **泛型**:泛型是C#中的一项重要特性,允许我们创建可重用的类型,同时保持类型安全。这一章可能介绍如何定义泛型类、接口、方法和集合,并探讨其优势和使用场景。 2. **LINQ(Language Integrated Query)**:...
3. **泛型**:C# 2.0 引入了泛型,使得类型安全的代码重用成为可能,M115到M126可能包括泛型类、泛型方法、约束等内容。 4. **Lambda表达式和 LINQ**:C# 3.0 引入的Lambda表达式简化了匿名函数的写法,与LINQ...
9. **设计模式**:学习常见的设计模式,如单例模式、工厂模式、观察者模式等,这些模式是解决特定问题的最佳实践,可以提高代码的可维护性和可扩展性。 10. **ASP.NET与WPF**:对于Web开发,C#与ASP.NET框架结合...
同时,C# 2005支持各种设计模式,如工厂模式、单例模式、观察者模式等,帮助开发者遵循最佳实践。 总之,《Visual C# 2005开发技术》涵盖的内容广泛,从基本语法到高级特性,再到实际应用,都是学习和掌握C# 2005...
14. **设计模式**:C#中的基类库支持多种设计模式的实现,如工厂模式、单例模式、观察者模式、装饰器模式等,有助于编写可维护和扩展的代码。 15. **垃圾回收**:.NET框架提供了自动内存管理,通过垃圾回收机制来...
业务逻辑层则包含了处理业务规则和流程的类,这些类可能使用设计模式如工厂模式、单例模式等来实现。服务层通常涉及与数据库的交互,使用ADO.NET进行数据访问,通过SQL语句执行CRUD操作。 数据库文件可能包括数据库...
- **概念**:C# 2.0引入了许多新特性,如泛型、迭代器等。 - **应用场景**: - 更新旧代码库。 - 新项目开发。 #### 49. 学习 ECMA 标准 - **概念**:ECMA标准定义了C#语言的规范。 - **应用场景**: - 了解语言...
6. **设计模式**:书中可能包含了常见的设计模式,如工厂模式、单例模式、观察者模式等,这些模式在.NET组件开发中扮演着重要角色。 7. **异常处理**:.NET提供了强大的异常处理机制,书会介绍如何正确抛出、捕获和...
泛型可以帮助实现如工厂模式、单例模式等设计模式,使代码更加简洁,同时保持类型安全。 综上所述,"Day_15_Generics_Demo"可能包含了一系列的练习和示例,用于展示如何在实际项目中应用这些泛型概念。通过学习和...
- 泛型:泛型允许在类、接口和方法中定义类型参数,提高代码的重用性和安全性。 - Lambda表达式和Linq:Lambda表达式是匿名函数的简洁表示,常用于LINQ(Language Integrated Query)查询,简化数据操作。 3. **...