- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
public class Singleton<T> where T : class
{
private static T _Instance = null;
protected static readonly object locker = new object();
public static T Instance
{
get
{
if (_Instance == null)
{
lock (locker)
{
if (_Instance == null)
{
ConstructorInfo[] info = typeof(T).GetConstructors(BindingFlags.Instance | BindingFlags.NonPublic);
if (info.Length > 0)
_Instance = (T)info[0].Invoke(null);
}
}
}
return _Instance;
}
}
protected Singleton() { }
static Singleton() { }
}
sven47 27.11.2009 01:42 # −2
ConstructorInfo[] info = typeof(T).GetConstructors(BindingFlags.I nstance | BindingFlags.NonPublic);
if (info.Length > 0)
_Instance = (T)info[0].Invoke(null);
можно заменить одной строчкой
_Instance = default(T);
guest 27.11.2009 04:19 # 0
guest 27.11.2009 10:18 # 0
1. null
2. new object()
как вы думаете?
Ztranger 27.11.2009 15:30 # 0
guest 27.11.2009 04:21 # 0
Класс абсолюнто бессмысленный...
alex 27.11.2009 06:52 # 0
...
_Instance = new T();
guest 27.11.2009 10:17 # 0
guest 24.12.2009 00:27 # 0
Nagg 27.11.2009 16:32 # 0
guest 01.12.2009 16:27 # 0
Ну а если закрытый, то: Activator.CreateInstance(typeof(T)); работает быстрые для конструктора по умолчанию (он сам достучится до закрытого конструктора).