• 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;
                }

            }

        }

    }


  • 相关阅读:
    HTTP
    HTTP
    Tomcat
    Tomcat
    时下流行的9种恶意软件,你都了解吗?
    MYSQL中表级锁、行级锁、页级锁介绍
    MYSQL中表级锁、行级锁、页级锁介绍
    MYSQL存储引擎笔记
    MYSQL存储引擎笔记
    Shell脚本案例:批量新增用户
  • 原文地址:https://www.cnblogs.com/swnuwangyun/p/556827.html
Copyright © 2020-2023  润新知