在检查 .net 中的通用集合时,我发现了 KeyedByTypeCollection。虽然我使用过它并了解了如何使用它,但我不知道它在哪种场景下有用。
我通读了ServiceProvider、缓存等使用泛型完成,无需强制转换,但拿不到太多。
我想,它被纳入.Net框架一定是有原因的。任何使用过 KeyedByTypeCollection 的人都可以向我解释他们为什么使用它,或者任何人,如果他们知道可以在哪种情况下使用它,可以向我解释一下。
更令人好奇的是,还有其他语言支持这种类型的集合吗?
AFAIK,这个通用集合只是作为一个简单的包装KeyedCollection<KEY,VALUE>
when KEY
是类型VALUE
储藏。
例如,如果你想实现一个返回单例的工厂,使用这个集合是非常方便的:
public class Factory<T>
{
private readonly KeyedByTypeCollection<T> _singletons = new KeyedByTypeCollection<T>();
public V GetSingleton<V>() where V : T, new()
{
if (!_singletons.Contains(typeof(V)))
{
_singletons.Add(new V());
}
return (V)_singletons[typeof(V)];
}
}
这个简单工厂的使用如下:
[Test]
public void Returns_Singletons()
{
Factory<ICar> factory = new Factory<ICar>();
Opel opel1 = factory.GetSingleton<Opel>();
Opel opel2 = factory.GetSingleton<Opel>();
Assert.IsNotNull(opel1);
Assert.IsNotNull(opel2);
Assert.AreEqual(opel1, opel2);
}
另一种用法是KeyedByTypeCollection<T>
将位于服务定位器内...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)