日期:2014-05-17  浏览次数:20804 次

求详解一段示例代码中的技术点
一个泛型单例基类。

using System;
using System.Linq;
using System.Reflection;
 
namespace SingletonDemo
{
  public abstract class Singleton
  {
    private static readonly Lazy<T> _instance
      = new Lazy<T>(() =>
        {
          var ctors = typeof(T).GetConstructors(
              BindingFlags.Instance
              |BindingFlags.NonPublic
              |BindingFlags.Public);
          if (ctors.Count() != 1)
              throw new InvalidOperationException(String.Format("Type {0} must have exactly one constructor.",typeof(T)));
          var ctor = ctors.SingleOrDefault(c => c.GetParameters().Count() == 0 && c.IsPrivate);
          if (ctor == null)
              throw new InvalidOperationException(String.Format("The constructor for {0} must be private and take no parameters.",typeof(T)));
          return (T)ctor.Invoke(null);
        });
 
    public static T Instance
    {
      get { return _instance.Value; }
    }
  }
}

点链接可以看到原地址,点不开的话多刷几遍就可以。
http://www.fascinatedwithsoftware.com/blog/post/2011/07/13/A-Generic-Singleton-Class.aspx

求深入详解,蜻蜓点水的就不要啦。

------解决方案--------------------
象下面的写法,是不是更容易理解一些?