13 years C/C++/C# programing, focus on embedded and mobile device development.

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
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;
            }

        }

    }

}


posted on 2006-11-10 17:18  woaiusd  阅读(418)  评论(0编辑  收藏  举报