zoukankan      html  css  js  c++  java
  • A simple C# generic singleton class

    using System;
    using System.Reflection;

    namespace MiniCafe.Util
    {
        
    /// <summary>
        
    /// this is the base class for singleton mode in csharp. Derived class must have a
        
    /// privae or protected constructor without any parameters, otherwise exception will
        
    /// be throwed.
        
    /// </summary>
        
    /// <typeparam name="T"></typeparam>

        public class Singleton<T>
            where T : 
    class
        
    {
            
    private static T instance;
            
    /// <summary>
            
    /// instace property of class T
            
    /// </summary>

            public static T Instance
            
    {
                
    get
                
    {
                    
    if (instance == null)
                    
    {
                        
    lock (typeof(T))
                        
    {
                            
    if (instance == null)
                            
    {
                                ConstructorInfo constructor 
    = typeof(T).GetConstructor(BindingFlags.Instance | BindingFlags.NonPublic, nullnew Type[0], new ParameterModifier[0]);
                                
    if (constructor == null)
                                    
    throw new Exception("The object that you want to singleton doesnt have a private/protected constructor so the property cannot be enforced.");

                                
    try
                                
    {
                                    instance 
    = constructor.Invoke(new object[0]) as T;
                                }

                                
    catch (Exception e)
                                
    {
                                    
    throw new Exception("The Singleton couldnt be constructed, check if the type T has a default constructor", e);
                                }

                            }

                        }

                    }

                    
    return instance;
                }

            }

        }

    }


  • 相关阅读:
    使用公钥和私钥实现LINUX下免密登录
    XML入门
    JSP页面中的errorPage属性和web.xml<error-page>标签的区别
    JAVA、TOMCAT环境变量配置
    在Eclipse Neon中导入serlvet-api等jar包
    56. Merge Intervals
    55. Jump Game
    34. Find First and Last Position of Element in Sorted Array
    33. Search in Rotated Sorted Array
    3. Longest Substring Without Repeating Characters
  • 原文地址:https://www.cnblogs.com/swnuwangyun/p/556827.html
Copyright © 2011-2022 走看看