对于泛型参数的每种组合,泛型类中的静态字段将具有单独的值。因此,可以将其用作Dictionary
这是不是一个静态的字典更好或更坏<类型, 无论 >?
换句话说,这些实现中哪个更有效?
public static class MethodGen<TParam> { public static readonly Action<TParam> Method = CreateMethod(); static Action<TParam> CreateMethod() { /*...*/ } }
要么,
public static class MethodGen { static readonly Dictionary<Type, Delegate> methods = new Dictionary<Type, Delegate>(); public static Action<T> GetMethod<T>() { //In production code, this would ReaderWriterLock Delegate method; if(!methods.TryGetValue(typeof(T), out method) methods.Add(typeof(t), method = CreateMethod<T>()); return method; } static Action<T> CreateMethod<T>() { /*...*/ } }
特别是,CLR如何通过通用类型参数查找静态字段?
我喜欢以这种方式使用泛型类型。特别地,正是出于这个目的,我经常有私有嵌套的泛型类。
我喜欢它的主要问题是,它很难 不 得到正确初始化这种方式(在线程安全方面),给出的方法类型的初始化工作。唯一的问题是,如果初始化失败,该怎么办- 偶尔我会想起要引发第一个必要访问的异常,但这很少见。
我不想 确切 猜测CLR如何通过类型参数查找类型,但是我很确定它将进行优化以实现反复:)