1.什么是泛型缓存
一个典型用列
cs
namespace JunkLearning
{
public class GenericCachePool
{
static Dictionary<string, Shape> cacheDic;
static GenericCachePool()
{
cacheDic = new Dictionary<string, Shape>();
}
//函数泛型与泛型约束
//可以理解为<>中,入参一个类型而非一个变量
//入参一个"类型": Class, 入参一个"变量" Class a;
//根本目的和作用是使用"类型"做缓存索引值,而非"变量"
public static CacheType GetCache<CacheType>() where CacheType : Shape, new()
{
string cacheName = typeof(CacheType).ToString();
CacheType finalResult = null;
if (cacheDic.ContainsKey(cacheName))
{
finalResult = cacheDic[cacheName] as CacheType;
}
else
{
finalResult = new CacheType();
cacheDic.Add(cacheName, finalResult);
}
return finalResult;
}
}
}
关于代码的解释,这个CacheTpye是什么,你可以把他看成一个T方便明白逻辑。
public static T GetCache<T>() where T: Shape, new()
new()是为了后面能实例对象。而下文中的finalResult=new CacheType();是实例对象,在代码世界中没有什么东西是能凭空就出现的,要想获得首先得实例它。
2.泛型缓存的作用是什么
这个cache适用的情况更多的是一种:"单例" "动态"的缓存情况。
即:一个类型的数据全局只有唯一一个对象,但是这个对象数据,或者是容器会经常发生变化。
比如一个玩家的数据PlayerData,在游戏运行中有且只有一份,而且会不断地动态变化。
当我们想访问缓存数据时,只需要指定类型就可以拿到数据容器与其数据,相对方便。
3.倘若不用,用非泛型。
那就需要多写几遍一样的代码,只是改变其中的string值,
object就更糟糕了。
泛型让你"写一次代码,服务所有类型",同时保持类型安全,不需要强制转换。