-
A simple C# generic singleton class
using System;
using System.Reflection;
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
namespace MiniCafe.Util
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <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
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
private static T instance;
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
/// instace property of class T
/// </summary>
public static T Instance
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
get
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
if (instance == null)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
lock (typeof(T))
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
if (instance == null)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
ConstructorInfo constructor = typeof(T).GetConstructor(BindingFlags.Instance | BindingFlags.NonPublic, null, new 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.");
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
try
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
instance = constructor.Invoke(new object[0]) as T;
}
catch (Exception e)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
throw new Exception("The Singleton couldnt be constructed, check if the type T has a default constructor", e);
}
}
}
}
return instance;
}
}
}
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
-
相关阅读:
HTTP
HTTP
Tomcat
Tomcat
时下流行的9种恶意软件,你都了解吗?
MYSQL中表级锁、行级锁、页级锁介绍
MYSQL中表级锁、行级锁、页级锁介绍
MYSQL存储引擎笔记
MYSQL存储引擎笔记
Shell脚本案例:批量新增用户
-
原文地址:https://www.cnblogs.com/swnuwangyun/p/556827.html
Copyright © 2020-2023
润新知