zoukankan      html  css  js  c++  java
  • 泛型单一模式

    泛型单一模式类:(fully lazy instantiation) 

    public sealed class Singleton<T>
            
    where T : class
        {
            
            
    public static T Instance
            {
                
    get
                {
                    
    return Nested.instance;
                }
            }

            
    private class Nested
            {
                
    // Explicit static constructor to tell C# compiler
                
    // not to mark type as beforefieldinit
                static Nested()
                {
                }

                
    internal static readonly T instance = typeof(T).InvokeMember(typeof(T).Name, BindingFlags.CreateInstance | BindingFlags.Instance | BindingFlags.NonPublic, nullnullnullas T;
            }
        }

    实现要点
    1. 静态构造函数
    静态构造函数用于初始化任何静态数据,所以它的执行顺序应该在静态成员初始化之后。

    class Test
        {
            
    static int value= 1//第一步

            
    static string staticString;

            
    static Test()
            {
    //第三步
                value = 2;
                value2
    = 3;
            }

            
    public static int value2= 1//第二步

        }

    当程序第一次执行如下语句时
    Test test
    = new Test();
    执行顺序就是上面标出的步骤。
    也就是说 
    test.value 
    = 2
    test.value2 
    = 3

    2. 嵌套类的静态构造函数的作用
    嵌套类的静态构造函数不会随着外部类的触发而初始化。有了嵌套类的静态构造函数,它会告诉C#编译器只有当需要使用内嵌类的时候,嵌套类的静态数据才开始初始化。所以上面介绍的单一模式是属于完全延迟初始化。
    3.利用反射时使用"BidingFlags.NonPublic”,确保调用的的具体单一实例类中的private constructor.事实上,具体单一实例类中不应该有public的构造函数。为了就是确保不被误实例化。
    4.使用sealed 关键字,防止被继承。

    具体单一实例类: 

    Code

     Main:

    Code

    为什么不用double-check locking来实现,请参照

    http://www.yoda.arachsys.com/csharp/singleton.html 

    泛型单一模式参考地址:

    http://www.codeproject.com/KB/architecture/GenericSingletonPattern.aspx

  • 相关阅读:
    R语言做文本挖掘 Part4文本分类
    在VS2005中使用原来的IIS调试Web程序(像VS2003一样)
    “提高一下dotnet程序的效率一”中关于exception的问题
    asp.net Cookies 转码的问题 中文丢失
    静态构造函数
    js在firefox中的问题
    模板引擎的一种实现
    .NET面试题,看看你的水平[转]
    转载 软件架构师应该具备的素质(Enterprise Solution Architects and Leadership)
    用正则表达式提取url中的Querystring参数
  • 原文地址:https://www.cnblogs.com/webfpc/p/1441221.html
Copyright © 2011-2022 走看看